- 博客(51)
- 资源 (21)
- 收藏
- 关注
原创 Android Studio 的 Flutter 项目没有Logcat 面板问题,特此记录
在学习Fullter项目时,发现在AS状态栏View-Tool Windows 下无法找到Logcat面板,无法看到控制台输出的日志,正常Android项目是有的,先针对这种情况给出解决方案。首先查看一下 Android sdk 版本,我的是29,在 Project 面板中 , 点击右键 , 在弹出的菜单中 , 选择 " Open Module Settings " 选项,选择 Facets 选项点击 + 按钮 , 选择 Android ,在弹出的对话框 Choose Module 中.
2022-04-13 13:14:24
4125
1
原创 CameraX让实现Camera更简单
前段时间,突然看到一篇文章说CameraX,了解了一番,发现这功能真好,能帮我们节省好多工作量,以前我们写Camera功能需要使用Camera2,要处理SufraceView相关的一堆东西,还有旋转、预览尺寸跟画面尺寸的选择,各品牌手机设备上的兼容性,搞不好就变形了,没上百行甚至几千行代码绝对搞不定,Google也意识到了这个问题,CameraX 正是为解决这个痛点而诞生的。先看看官方对CameraX的定义:更多说明可去参考官方文档:https://developer.androi.
2022-01-28 14:42:34
3620
原创 2021年终总结,程序员的日子
这是我第一次在博客上写年终终结,可能2021年总结写的有点晚了,顺便看了下自己博客的码龄,已有10年,10年时间一直坚持在做Android方面的开发,但时间也无法冲淡我对研发的乐趣。今年换了一份工作,从友缘到雷石,在友缘的日子里颇有挫折,公司发展也不好,换了好几个团队,刚开始公司起步做海外,做了1年时间也没有达到好的效益,领导突发离职了,然后两个海外业务线合并,接着又做了3个月时间,项目就彻底停了,之后就到了国内的项目,由于公司不景气,项目开始缩减,人员也开始缩减。不过在友缘的日子,让我学到了很多东
2022-01-27 17:01:34
6785
转载 2021年比较受欢迎的Github开源库
一 、基本控件1.TextViewHTextView一款支持TextView文字动画效果的Android组件库。 ScrollNumber滚动数字控件 ticker滚动数字控件 ReadMoreTextView阅读更多,折叠文本 ExpandableTextView折叠文本 android-autofittextview自动调整文字大小 html-textview展示html标签 BabushkaText自定义文本样式 Android-TextView-LinkB...
2022-01-07 15:01:17
1652
转载 写一篇最好懂的HTTPS讲解
https这项技术现在已经应用得非常广泛了。随着苹果、Google等各大互联网领头企业纷纷在自己的操作系统、浏览器等主流产品中强制要求使用https,http的淘汰也正式进入了倒计时。其实https对于客户端开发人员来说并没有什么需要特别注意的地方,因为代码和写http请求时并没有什么两样。但也正是因为这个原因,导致许多客户端开发人员对https并不了解,只知道它是安全的加密网络传输,对其具体的工作原理却一无所知。那么客户端开发人员到底需不需要了解https呢?我认为还是有一定必要的,掌握了http
2021-12-31 17:47:45
175
转载 appcompat 1.3.0,是时候放弃startActivityForResult了
如果你将项目中的appcompat库升级到1.3.0或更高的版本,你会发现startActivityForResult()方法已经被废弃了。这个方法相信所有做过Android的开发者都用过,它主要是用于在两个Activity之间交换数据的。那么为什么这个如此常用的方法会被废弃呢?官方给出的说法是,现在更加建议使用Activity Result API来实现在两个Activity之间交换数据的功能。我个人的观点是,startActivityForResult()方法并没有什么致命的问题,只是A
2021-12-14 10:37:19
796
转载 常用的数据结构
线性表常见的线性表有两种: 顺序表和链表,我们先来diff下两者区别。顺序表顺序表是基于数组实现的,比如ArrayList,因为顺序,所以要占用一块连续的内存空间,因为不连续就不顺序了,因为要占用连续的内存空间,所以是比较egg pain的。首先,它不费内存,因为只需要存储元素值就行了。但是,它要连续的内存空间,就像住酒店似的,我有很多空房,但是不挨着,你非要一串挨着的,我得跟其他客人说说,让人家腾出来,给你弄几间挨着的,体现在代码中就是: 可能会频繁触发GC,因为没有连续的内存空间,需要将
2021-10-15 10:00:44
107
原创 volatile的原理解说
volatile也是互斥同步的一种实现,不过它非常的轻量级。volatile有条关键的语义:保证被volatile修饰的变量对所有线程都是可见的要理解volatile关键字,我们得先从Java的线程模型开始说起。如图所示:Java内存模型规定了所有字段(这些字段包括实例字段、静态字段等,不包括局部变量、方法参数等,因为这些是线程私有的,并不存在竞争)都存在主内存中,每个线程会 有自己的工作内存,工作内存里保存了线程所使用到的变量在主内存里的副本拷贝,线程对变量的操作只能在工作内存里进行
2021-07-31 16:03:23
154
原创 Google FCM推送集成及问题排查
一、集成流程概要:1、在Firebase后台注册应用,并下载google-services.json文件,将文件导入到项目中2、项目中添加依赖: a、在根级(项目级)Gradle 文件 (build.gradle) 中添加规则,以纳入 Google 服务 Gradle 插件。此外,请确认您拥有 Google 的 Maven 代码库 buildscript { repositories { // Check that you have the foll...
2021-06-27 11:39:57
5975
原创 Facebook统计事件接入及广告关联
一、FB接入流程:接入链接:https://developers.facebook.com/docs/app-events/getting-started-app-events-android/?translation主要流程:1、FB开发者平台:(1)创建应用,获取应用编号(2)添加密钥散列(3)添加包名、添加处理深度链接的活动(一般为SplashActivity或者MainActivity)(4)添加应用下载链接(5)上线前将模式从开发中改为上线2、代码处理:(1
2021-06-27 11:38:55
8231
2
转载 Adjust接入记录
接入链接:https://github.com/adjust/android_sdk/blob/master/doc/chinese/README.md整体接入流程和FB、AF接入流程相差不大流程:添加依赖、权限、混淆、初始化、添加事件注意事项:一、接入方面:1、如果发布Google商店以外的商店,需要额外添加权限和混淆:<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>-k
2021-06-27 11:38:32
2905
原创 在线翻译方案调研
1.微软翻译(1)简介Microsoft 翻译工具是一项基于云的机器翻译服务,该服务使用先进的神经机器翻译技术并提供统计机器翻译技术。支持多种语言,其支持的语言覆盖全球国内生产总值 (GDP) 95% 以上的区域。使用 Translator 可构建应用程序、网站、工具或任何需要多语言支持的解决方案。了解微软翻译:https://www.microsoft.com/zh-cn/translator/business/machine-translation/(2)文本翻译支持73种语言.
2021-06-27 11:38:10
334
原创 接入FaceBook登录和遇到问题排查
一、接入Facebook登录接入流程:接入流程:https://developers.facebook.com/docs/facebook-login/android官方Demo:https://github.com/facebook/facebook-android-sdk/tree/master/samples/FBLoginSample?fbclid=IwAR2sV-WAEz3_s6yxMwZkh1RuhGWiOv-qBuYfVNn8ma7K0q0-h5z0QhzZnMQFacebook登
2021-06-27 11:37:38
10537
原创 Google市场,APP版本更新实现方式
一、直接跳转google play应用详情直接跳转到google play应用详情内由用户手动触发版本更新。实现方式包括两种:跳转到google play app应用详情内和跳转到google play网页版应用详情内。一般实现原则是用户如果安装了google play app跳转到app,未安装跳转到网页。优点:代码实现简单不需要依赖额外代码,由google play提供下载安装,方便测试。缺点:需要界面调整动作。参考链接:https://developer.andro..
2021-06-26 09:56:16
6684
5
原创 关于Google账号被封、被下架、提审被拒等原因分析及建议
一、Google账号被封原因推测及建议。谷歌账号被封,Google公司发送的被封邮件中不会明确解释具体的被封原因,可以通过申诉的方式去获取具体被封原因,但是这个有几率得不到Google的回复,在发送申诉邮件时态度一定要诚恳,首先先承认自己错了,然后再表明自己认真阅读了开发者政策,最后在说明自己不太清楚违反了哪一个政策,希望能给到原因和建议等。推测会有以下几个原因:1、APK被判定为马甲包:APK在代码,UI,应用描述等方面和商店其他产品相似度高引起的封号。 (1)代码结构相似度高:框架封装.
2021-06-26 09:56:00
8706
3
原创 Google商店应用上架注意事项
一.代码相关:1.权限问题:这个权限READ_PHONE_STATE如果不是必要权限,如果能去掉的话还是尽量去掉。2.支付相关:代码中不要出现第三方支付。去掉第三方相关的名字,尽量也去掉注释(WXEntryActivity,WXPayEntryActivity,alipay,支付宝,微信,等等)。3.不建议使用个推,bugly。二.FB相关和Google上架相关:原则:FB广告投放不允许投发Dating类以及相近的产品(白名单产品除外)。为了避免触发FB这方面的审核,需要对上架产品做以.
2021-06-26 09:55:34
1676
4
原创 Google Play 支付 SDK 接入时遇到的坑
问题:调用 querySkuDetailsAsync() 方法传入商品ID进行查询商品详情时,返回的skuDetailsList.size()一直是0导致无法查询到商品,无法继续进行购买流程。原因:不论是beta版应用还是正式版应用,都要在谷歌后台的应用列表中显示该应用的状态为【Published】或是【已发布】状态之后,在app里面才能查到商品id,执行支付等操作,否则怎么样都查不到。问题:调用 querySkuDetailsAsync() 方法传入商品ID进行查询商品详情时,返回报错..
2021-06-26 09:55:18
5753
1
原创 接入Google Play 支付经历
APP内的谷歌结算库订阅调用流程图1.0:APP内的谷歌结算库订阅调用流程图2.0:APP内的谷歌结算库一次性购买调用流程图3.0:工程接入Google结算库需要做的事情:在 gradle 中引用的依赖:implementation 'com.android.billingclient:billing:3.0.0'在 AndroidManifest 中添加的权限<uses-permission android:name="com.android...
2021-06-26 09:49:46
2204
原创 工厂模式整理
定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。个人理解:顾名思义工厂模式就是按照工厂流水线的模式去生成产品,其设计思想就是提取产品的共性去制造流水线(接口包含的方法),之后创建一个工厂(工厂类)去包装这个流水线,最后通过工厂去制造具有这些共性的不同产品(产品实现接口,重写接口方法)。这就是工厂模式。工厂方法模式是创建型模式,工厂模式根据抽象程度可以分为三种:简单工厂模式,工厂方法模式,抽象工厂模式。一、简单工厂模式定义:简单工厂模式又叫做静态工厂方法模式。一个抽象产品类,可以派生
2021-06-26 09:49:08
131
原创 SharedPreferences源码分析
SharedPreferences是Android平台上轻量级的存储类,用来保存App的各种配置信息,其本质是一个以键值对(key-value)的方式保存数据的xml文件,其保存在/data/data/PACKAGE_NAME/shared_prefs目录下。这里先列举在使用时的注意事项:1、SharedPreferences一经加载,它内部存储的数据就会以Map的形式一直保存在内存中,所以不宜存放大数据。2、获取SharedPreferences时,如果是初次加载,那么需...
2021-06-26 09:48:54
461
原创 Android中屏蔽返回键,HOME键以及模拟HOME键返回效果的方法
1. 屏蔽实体按键屏蔽实体按键(HOME键有些特别,需要单独去分析)switch (keyCode) {case KeyEvent.KEYCODE_HOME:return true;case KeyEvent.KEYCODE_BACK:return true;case KeyEvent.KEYCODE_CALL:return true;case KeyEvent.KEYCODE_SYM:return true;case KeyEvent.KEYCODE_VO.
2021-06-26 09:48:41
2432
1
原创 状态栏SystemUI总结
自己新浪博客转移一、SystemUI 概述自android2.2 开始, 原本存在与framework-res.apk 中的状态栏和下拉通知栏界面控制被分割出一个单独的apk 文件, 命名为SystemUI.apk, 保存在System/app 文件夹中。在SystemUI.apk 中, 是存在着状态栏的图标,XML 和控制文件等, 这样的分割, 使我们可以更方便地去修改。SystemUI 模块中主要包含了USB 和Statusbar 两个子模块,本文将以Statusbar 为主导...
2021-06-26 09:48:28
703
原创 GIT基本操作指南搜集
自己新浪博客转移【GIT上手篇】-1-基本操作(初始化仓库,添加、提交文件)创建(初始化)一个GIT库init命令说明:用于仓库的初始化参数:--bare创建一个纯仓库(不含缓存区和工作目录,服务器一般采用这种形式)操作:从本地工作目录添加文件到缓存区add命令说明:文件从工作目录添加到缓存区(包括新增文件和修改文件)参数:.提交工作目录中的所有未删除文件到缓存区(包括新增文件和修改文件)-A提交工作目...
2021-06-26 09:47:18
155
原创 Android NFC 读写示例
自己新浪博客转移在Android NFC 应用中,Android手机通常是作为通信中的发起者,也就是作为各种NFC卡的读写器。Android对NFC的支持主要在 android.nfc 和android.nfc.tech 两个包中。android.nfc 包中主要类如下:NfcManager 可以用来管理Android设备中指出的所有NFCAdapter,但由于大部分Android设备只支持一个NFC Adapter,所以一般直接调用getDefaultAapater来获取手机中的Adapter
2021-06-21 16:08:08
2047
翻译 NFC Google翻译文档
自己新浪博客转移NFC(近场通信)NFC是一套短距离的无线通信,通常距离是4厘米或更短。NFC工作频率是13.56M Hz,传输速率是106kbit/s 到848kbit/s. NFC总是在一个发起者和一个被动目标之间发生。发起者发出近场无线电波,这个近场可以给被动目标供电。这些被动的目标包括不需要电源的标签,卡,也可以是有电源的设备。与其他无线通信技术比较, 例如蓝牙和WiFi, NFC提供更低带宽和距离,并且低成本,不需要供电,不需要实现匹配,整个通信过程仅仅是短短的靠近一秒就能完成。一
2021-06-21 16:04:36
201
原创 WiFi设计原理(源码分析)转发
最近一直在研究WiFi,从AP层到Framework层,和大家共同分享下。(添加红色部分应该能使大家更易理解)初始化在SystemServer启动的时候,会生成一个ConnectivityService的实例,try {Log.i(TAG, "Starting Connectivity Service.");ServiceManager.addService(Context...
2021-06-21 15:28:04
914
原创 Activity启动过程详解(转发)
前面发了blog分析了ActivityManager框架的大体结构,主要就是一个进程通信机制,今天我通过深入Activity的启动过程再次深入到ActivityManager框架,对其进行一个更深入的了解以桌面启动一个应用Activity为例,onClick事件后,会调用startActivityForResult(Intent, int)public void startActivityForResult(Intent intent, int requestCode) {...
2021-06-21 15:22:11
198
原创 Android中的消息队列 (转发)
我们要理解Android 的消息系统,Looper,Handle,View 等概念还是需要从消息系统的基本原理及其构造这个源头开始。从这个源头,我们才能很清楚的看到Android 设计者设计消息系统之意图及其设计的技术路线。1.消息系统的基本原理从一般的系统设计来讲,一个消息循环系统的建立需要有以下几个要素: 消息队列 发送消息 消息读取 消息分发 消息循环线程首先来研究一下消息驱动的基本模型,我使用如下的图形来表示一个消息系统最基本构成:上面的模型代...
2021-06-21 15:14:09
1113
原创 Android Intent 打开系统应用实例
Intent应该算是Android中特有的东西。你可以在Intent中指定程序要执行的动作(比如:view,edit,dial),以及程序执行到该动作时所需要的资料。都指定好后,只要调用startActivity(),Android系统会自动寻找最符合你指定要求的应用程序,并执行该程序。下面列出几种Intent的用法显示网页:Uri uri = Uri.parse("http://www.google.com"); Intent it= new Intent(Intent.ACTION_VI...
2021-06-21 14:51:21
315
原创 Android manifest属性总结
自己的新浪博客转移1.android:allowTaskReparenting是否允许activity更换从属的任务,比如从短信息任务切换到浏览器任务。---------------------------------------------------------------2. android:alwaysRetainTaskState是否保留状态不变,比如切换回home,再从新打开,activity处于最后的状态-----------------------------...
2021-06-21 14:49:41
338
原创 Android Studio Profiler内存检测
Profiler 模块说明1.Android Profiler 显示当前正在剖析的进程和设备。2在Sessions窗格中,选择要查看的会话,或启动一个新的剖析会话。3.使用缩放按钮控制要查看的时间轴范围,或使用Attach to live按钮跳转到实时更新。4.事件时间轴显示与用户输入相关的事件,包括键盘活动、音量控制变化和屏幕旋转。5.共享时间轴视图,包括 CPU、内存、网络和耗电量图表。Memory Profiler 模块说明用于强制执行垃圾回收事件的按钮。...
2021-06-21 14:46:53
1249
原创 Android 架构介绍
自己新浪博客转移Android作为一个移动设备的平台,其软件层次结构包括了一个操作系统(OS),中间件(MiddleWare)和应用程序(Application)。根据Android的软件框图,其软件层次结构自下而上分为以下几个层次:第一、操作系统层(OS)第二、各种库(Libraries)和Android 运行环境(RunTime)第三、应用程序框架(Application Framework)第四、应用程序(Application)以下分别介绍Andoid各个层次的软件的重点及其相关技术...
2021-06-21 14:37:29
128
原创 android中Bitmap和Drawable的相互转换
一、Bitmap转DrawableBitmap bm=xxx; //xxx根据你的情况获取BitmapDrawablebd=new BitmapDrawable(bm);Android开发网提示因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。二、 Drawable转Bitmap转成Bitmap对象后,可以将Drawable对象通过Android的SK库存成一个字节输出流,最终还可以保存成为jpg和png的文件。Drawable ...
2021-06-21 14:31:37
8270
原创 监听Android程序的安装和卸载
在android系统中,安装和卸载都会发送广播,当应用安装完成后系统会发android.intent.action.PACKAGE_ADDED广播。可以通过intent.getDataString()获得所安装的包名。当卸载程序时系统发android.intent.action.PACKAGE_REMOVED广播。同样intent.getDataString()获得所卸载的包名。 应用程序无法监听自己的安装与卸载,但覆盖安装可以监听到自己的android.intent.action.PACKA...
2021-06-19 18:36:31
1165
3
原创 android中指南针的应用
package cn.android.aa;import android.app.Activity;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Path;import android.hardware.SensorListener;import
2021-06-19 18:29:21
126
原创 Android开发中修改程序字体的样式
Android提供三种字体:“Sans”,“serif“和“monospace”。 1、在Android XML文件中设置字体 可以采用android:typeface,例如android:typeface=”monospace”。在这里例子中我们在Activity中对android:text=”Hello, World! 您好”分别进行了四种显示方式,依次为“Sans”,“serif”,“monospace”和系统缺省方式(经试验缺省采用采用sans)。英文字体有差异,貌似中文字体没有差异。XM
2021-06-19 18:27:12
601
原创 PopupWindow的使用
main.xml中的代码:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"androi...
2021-06-19 18:23:38
126
原创 android 线程间的通信Handler
andriod提供了 Handler 和 Looper 来满足线程间的通信。例如一个子线程从网络上下载了一副图片,当它下载完成后会发送消息给主线程,这个消息是通过绑定在主线程的Handler来传递的。在Android,这里的线程分为有消息循环的线程和没有消息循环的线程,有消息循环的线程一般都会有一个Looper,这个事android的新 概念。我们的主线程(UI线程)就是一个消息循环的线程。针对这种消息循环的机制,我们引入一个新的机制Handle,我们有消息循环,就要往消息循环里 面发送相应的消息,自定
2021-06-19 18:19:34
119
原创 Android的四大主键
Android 应用程序是由以下四种组件构造而成的:·活动·广播接收器·服务·内容提供器需要注意的是,并不是每个 Andorid 应用程序都必须构建这4 个组件,有些可能由这些组件的组合而成。一旦你确定了你的应用程序中需要的组件,那么你就应该在 AndroidManifest.xml中列出他们。 这是一个XML 配置文件,它用于定义应用程序中需要的组件、组件的功能及必要条件等。这个文件是必须的。 详情参见Android manifest file documentat...
2021-06-19 18:10:12
654
原创 对Android中Activity的认识
这篇文章会涉及到以下几个内容一 Activity的生命周期二 让Activity变成一个窗口:Activity属性设定三 你后台的Activity被系统 回收怎么办:onSaveInstanceState四 调用与被调用:我们的通信使者 - Intent一 Activity的生命周期和其他手机 平台 的应用 程序 一样,Android的应用程序 的生命周期是被统一掌控 的,也就是说我们写的应用程序命运掌握在别人(系统)的手里,我们不能改变它,只能学习 并适应它。简...
2021-06-19 18:01:22
77
Android 开源框架ViewPageIndicator 和 ViewPager 仿网易新闻客户端Tab标签
2014-03-25
Android__WIFI模块分析
2011-10-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人