Android
Alex老夫子
这个作者很懒,什么都没留下…
展开
-
android android.permission.MANAGE_EXTERNAL_STORAGE使用
android11 及以上版本,如果release版本要读取外部存储公共目录,即sdcard公共目录,需要在androidManifest.xml下申明。好了,又可以愉快玩耍了。原创 2024-04-11 11:45:53 · 2052 阅读 · 0 评论 -
android 解决 adb命令启动service报app is in background uid null
1. adb shell am start-foreground-service -n 包名/类名。1. adb shell am startservice -n 包名/类名。原创 2023-12-17 16:40:23 · 1700 阅读 · 0 评论 -
解决 android Cannot access ‘<init>‘: it is private in
经过查阅资料,原来是依赖的单例类的构造函数不能使用private,这里做个记录;原创 2023-10-15 23:05:09 · 1164 阅读 · 0 评论 -
android 11及以上如何通过包名跳转APP
Android 11以下,上述代码就可以跳转,但是11及以上,查询包名相关的方法都被限制了,原创 2023-07-13 00:02:00 · 2059 阅读 · 1 评论 -
android 解决java.lang.SecurityException: Package com.xxx.xxx does not belong to 1000
比如,在进程A中调用进程B,进程B再去访问ContentProvider的call、query等方法,而call、query等方法里面又调用了ContentProvider.getCallingPackage(),那么就会报这个错;问题就出在进程A调用了进程B,进程B去访问ContentProvider.getCallingPackage(), 然后Binder.getCallingUid拿到的是进程A的身份的uid,而不是进程B的身份uid。解决问题的关键方法在于call()前后加上代码。原创 2023-06-04 18:36:31 · 4262 阅读 · 0 评论 -
android 获取手机系统属性
这个类获取,但是有一部分获取不了,比如手机子品牌“ro.product.brand.sub”,那么可以通过反射。2、也可以通过代码获取,一部分属性可以通过。原创 2023-02-13 23:20:41 · 1241 阅读 · 0 评论 -
adb 常用指令
15. 根据进程名或进程id,查看进程内存占用,一般看PSS(包含了该进程占用的共享内存),RSS(包含了自身和其他进程占用共享内存)11. 覆盖安装APP,须同签名,主要用于降级安装,d 指 downgrade。14. 根据包名清空APP缓存,包括内部存储和外包存储,比如缓存数据,数据库等。10. 覆盖安装APP,须同签名,可以降级安装,r 指 replace。17. 等待连接设备并抓取日志,日志文件保存于执行命令的目录下。7. 拉取文件或文件夹 到 电脑本地,后面的是路径。3. 查看连接的设备列表。原创 2022-10-26 15:57:31 · 402 阅读 · 0 评论 -
android ContentProvider call方法的使用
总所周知,ContentProvider用于跨进程通信,可以通过继承ContentProvider实现query、insert、delete、update、getType方法,来让其他进程对本进程的数据库进行CRUD增删改查操作,一般这是涉及到数据大的时候,如果涉及的数据量很小,可以通过重写ContentProvider的call 方法来简单实现跨进程通信;注意:自定义的ContentProvider也是可以在AndroidManifest.xml中指定运行在子进程的,和自定义的Service一样。原创 2022-12-25 12:21:05 · 3334 阅读 · 4 评论 -
android buildConfigField使用
注意:特别是字符串的使用,需要使用 "\"xx\""上面的使用一开便知道如何使用,好了,又可以愉快玩耍了。原创 2022-12-11 11:16:11 · 5521 阅读 · 0 评论 -
android String.format()使用
平时拼接字符串,估计一开始都是用+连接的,如果拼接的字符串太多,有时就不太好阅读,为了解决这个问题,好几年前用过String.format()这个高级方法,时间久了就容易忘记,这里记录下怎么使用的;使用Locale, 这个类可以指定语言环境,比如上述代码指定了英语环境,那么不管手机切换成什么语言,都只输出英语;当遇到手机切换语言的时候,上述代码就会出现一个问题,就是可能被转化为其他语言,所以还有一个方法,其实还有很多其他的%x占位,字符串和整数是最常用的,其他的网上资料很多的,这里就不赘述了;原创 2022-12-10 16:30:57 · 541 阅读 · 0 评论 -
android RecyclerView列表自动播放实现
最近有个需求,类似于皮皮虾那种列表上有播放器,滑动停止时自动播放可视区域的第一项;查了一些资料,看了一些大神的博客,受益匪浅,这里也做一个记录,方便以后搬砖;1、监听列表的滚动事件,知道什么时候开始滚动和停止滚动;build.gradle 中加上播放器和glide的依赖。2、找出可视区域的item,再找出第一项中的播放器;3、监听移除屏幕的item,及时回收播放器资源;3、找一个适合的播放器,有些播放器就是不得劲。好了,又可以愉快玩耍了。原创 2022-11-23 18:08:31 · 1784 阅读 · 3 评论 -
android 解决java.lang.IllegalArgumentException: The key must be an application-specific resource id
看提示,很明显了,说不能直接用整数作为key,要使用资源id,这是为了保证此整数的唯一性;这里用到了根据key设置tag,直接用的整数,就如上所述异常;在view中设置tag,有2种方法,好了,又可以愉快玩耍了。原创 2022-11-20 17:04:41 · 1291 阅读 · 0 评论 -
android 记录Activity和Fragment生命周期顺序
红色字体是Activity的生命周期,黑色字体是Fragment的;前提:Activity中包含有Fragment。好了,又可以愉快玩耍了。原创 2022-11-13 17:01:19 · 1185 阅读 · 0 评论 -
android 非前台进程发生异常,app会crash吗?
我们知道一个APP至少有个前台进程,有时会有几个进程,最常见的是有一个服务进程,前台交互的这个进程叫前台进程,优先级最高,最后才会被系统杀死;如果非前台进程发生异常了,前台进程会被杀死吗?整个APP会被杀死吗?注意:如果定义了全局异常捕获,非前台进程也是可以捕获的;好了,又可以愉快玩啥了。写一个例子来验证吧;原创 2022-11-12 12:35:30 · 209 阅读 · 0 评论 -
android 断点源码不对的一个坑
两种方式都显示在主线程,这就有问题了,难道handler发送消息就处于主线程了吗?哪还需要消息队列、Looper干啥?有时候会看看Android 源码,难免会去设置断点,看看源码是否执行这一步或者源码的逻辑,比如手机是安卓版本是30,那么gradle.build这里也要设置为30;最近重新看Handler源码的时候就遇到这么一个坑;就是要求手机的版本号要和项目的编译版本号一致!经过好多天的思索,终于找到问题的答案了;好了,又可以愉快玩耍了。原创 2022-11-08 16:25:57 · 237 阅读 · 0 评论 -
android Room初步使用
目前最高版本是2.4.3,如果用这个版本的话,compileSdk最低要求31,这里就暂时不用最高版本,以后再用;其实就是谷歌官方的一套工具包,提供各种工具类,有一些可以不用第三方的开源库了,现在比较流行google官方的JetPack(喷气背包),这是个什么东东呢?既然Room是大势所趋,那么学一学它改如何使用吧;注意:数据库是I/O操作,所以必须执行在子线程中;Realm不推荐使用,真难用,谁用谁知道!到这里就初步实现了Room的初步使用;GreenDao还不错!好了,又可以愉快玩耍了。原创 2022-11-07 13:10:43 · 1156 阅读 · 0 评论 -
android 设备重启代码
注意:需要系统root权限,也就是手机要root过才行,模拟器一般可以,因为有root权限。经过反复测试,此代码可以重启安卓设备,在主线程执行此代码便可;好了,又可以愉快玩耍了。原创 2022-10-28 19:57:36 · 2303 阅读 · 0 评论 -
android 安卓手机如何投屏到显示器
but,要想直接手机插一根线连接显示器,只有支持USB3.0及以上的才可以,目前大部分中低端手机都不支持USB3.0及以上,买手机问清楚了;这几天有个需求,可以手机投屏到显示器上,经过一番研究,手机连接电脑再投屏是可以的,重要的事说三遍:只有支持USB3.0及以上的手机才可以有线投屏到显示器!重要的事说三遍:只有支持USB3.0及以上的手机才可以有线投屏到显示器!重要的事说三遍:只有支持USB3.0及以上的手机才可以有线投屏到显示器!原创 2022-10-25 10:31:45 · 6637 阅读 · 1 评论 -
android Activity中几个关于栈的方法
nonRoot:此参数为false,只有该处于任务栈底时才生效,为true,对于该栈所有Activity都有效, 有个疑问,如果都有效直接true好了,搞个false不是多次一举吗?这个方法很神奇,移动该Activity实例所在的任务栈到后台(到该系统所有Activity任务栈之后),不会调用 onDestroy()方法,就相当于是人为的点下了home键切换到了桌面;我们都知道Activity是放入任务栈中的,这里记录几个关于栈的方法,可能在某些业务中能用得上。原创 2022-10-07 18:39:30 · 945 阅读 · 0 评论 -
android activity启动模式
一旦该模式的Activity的实例存在于某个栈中,任何应用再激活该Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中,比如:通话界面;如果栈中不存在该实例,将会创建新的实例放入栈中,比如:浏览器的主页,MainActivity(主页);如果在任务的栈顶正好存在该Activity的实例,就重用该实例,否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例),比如:浏览器的书签;原创 2022-10-06 18:00:05 · 262 阅读 · 0 评论 -
android 开源远程工具项目scrcpy 简单使用
这个应用程序提供通过USB或TCP/IP连接的Android设备的显示和控制。它不需要任何根访问权限。它可以在GNU/Linux、Windows和macOS上工作。这是项目的描述,说白了,就是一个类似于向日葵、teamviewer的开源的远程控制工具,不过是专门用于控制安卓设备的。如果提示找不到这个命令,说明没有安装成功,这个命令是控制已经连接上的安卓设备;首先需要下载对应电脑系统的版本,mac的话需要先安装homebrew,好了,又可以愉快玩耍了。原创 2022-09-27 18:32:54 · 4086 阅读 · 0 评论 -
android Socket 和 ServerSocket简单实现
android Socket 和 ServerSocket简单实现原创 2022-09-24 18:17:04 · 1394 阅读 · 0 评论 -
android 自定义全局异常捕获UncaughtExceptionHandler
一个APP总会有几个我们人脑忽略掉的异常,所以就需要一个全局异常捕获,来处理这些异常,好了,又可以愉快的玩耍了。原创 2022-09-23 18:58:00 · 785 阅读 · 0 评论 -
android android:largeHeap=“true“ 如何使用
官方文档也说明了,使用此属性,可以让APP分配更大的堆内存,大多数情况下不需要使用大内存模式,而应该更多关注自身APP代码的优化,内存的优化,此方法不是用来解决OOM内存溢出的;如果自身APP有很多图片或者视频展示的需要,可以使用。使用方法:在AndroidManifest.xml文件中加上。原创 2022-09-22 17:04:35 · 1671 阅读 · 0 评论 -
android 获取内存分配信息
android 获取内存分配信息。原创 2022-09-22 16:42:15 · 410 阅读 · 0 评论 -
android 解决io.reactivex.exceptions.UndeliverableException: java.lang.OutOfMemoryError
做定时器,定时器的方法还有很多,比如ScheduledExecutorService、AlarmManager、CountDownTimer等,此方法描述,说不推荐使用此方法处理IO绑定的和阻塞相关的任务,就是异步任务,且只会产生一个线程来处理任务,还可能产生内存泄漏;场景:用Rxjava 中的Schedulers类实现一个定时器,偶尔会造成页面卡主,再操作页面会提示ANR(应用无响应);最近在老项目里面发现一个Rxjava的坑,如上所示异常;好了,又可以愉快玩耍了。原创 2022-09-21 18:21:02 · 1718 阅读 · 0 评论 -
android AlarmManager实现定时器
这是一个实现的例子,首次发送闹钟广播不延迟加延迟时间,第2次开始延迟一定的时间,这里是10秒,时间可以自己定义。这里广播接收器用的是动态注册,根据官方文档可知,安卓8.0开始,一般情况静态注册广播接收器无效。...原创 2022-09-01 16:14:23 · 1109 阅读 · 7 评论 -
android View和ViewGroup创建以及绘制流程
View(Context context, @Nullable AttributeSet attrs) ------ onFinishInflate() xml布局加载完成 -------原创 2022-08-30 17:38:47 · 805 阅读 · 0 评论 -
android h5选择手机图片或者文件示例
当然,具体选择图片或者文件的方法没标出,这里不作记录,因为可以找到很多第三方的库或者自己写一个工具类,有时候有种需求,是从手机端的h5界面选择图片或者文件,这里需要用到。onShowFileChooser()方法,h5需要使用。好了,又可以愉快玩耍了。...原创 2022-08-12 18:34:12 · 3132 阅读 · 0 评论 -
android 解决通话录音时无法返回挂断状态的bug
最近有个定制的系统有个需求--------通话录音,一切就绪后,发现一个BUG,普通手机都可以正常监听到通话的3个状态,but,这个破手机 TelephonyManager.CALL_STATE_IDLE 不返回,据了解,安卓6.0开始不再支持通话录音,除非修改系统、系统放开权限、root,这也可以理解,毕竟这涉及到隐私问题,万一我一个亿的银行密码被人窃听了呢?好了,又可以愉快玩耍了。......原创 2022-08-11 19:14:31 · 743 阅读 · 0 评论 -
android 锁屏通知
最近有个需求,说要弄个锁频通知,通知倒是做过很多了,锁屏通知还真没弄过,经过一番研究,这里做个记录,方便搬砖。关键在于要用这个MediaStyle,此代码运行在Android11、12没问题,又可以愉快的玩耍了。...............原创 2022-07-30 18:54:29 · 5363 阅读 · 3 评论 -
android 解决The application could not be installed: INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION
运行app到真机上时,不能安装的问题以前也经常遇到,一般要么是签名问题,要么是手机授权问题,第一次遇到这么一个奇怪的问题,弄了半天,终于解决了,这里做个记录,防止下次再入坑。就思考这几天干了些啥,突然灵光一动,发现了一个问题,修改后,就好了,错误信息也不是很具体,只是说不能解析一个字符串,鬼知道是什么。我增加了一个服务,服务的名称少了一个冒号,于是修改后,这个错误日志真是服了you,这下又可以开心的玩耍了。记得前几天还运行得好好的,难道我手机变异了?.........原创 2022-07-21 16:50:54 · 5687 阅读 · 0 评论 -
android 原生请求权限代码
每次开新项目都要到处找请求权限的代码,老火得很,这里记录下,方便以后搬运,当然也有很多请求权限的开源项目,原创 2022-07-05 16:04:41 · 1325 阅读 · 0 评论 -
android 修改aar包资源文件的最简单方法
有时我们开发中会遇到一些老项目或者其他项目用的是aar包,不是通过maven配置的,然后同时还有2个及以上的aar包的资源文件重复了,也就是路径和名称都一样,这时就尴尬了,运行项目就会提示资源文件重复,在build.gradle文件写exclude也无任何效果,那么此时就需要把多的文件删除或者修改。这几天通过尝试,发现网上的很多方法,比如指令解压打包或者解压打包都不行,最后发现一种非常简单的方法,是可以的,这里做个记录。WIN系统下:先将aar文件修改后缀为.zip,用好压或者winrar等解压原创 2022-02-06 19:44:54 · 4149 阅读 · 0 评论 -
android 解决selector失效问题
android里面 selector用于按钮的背景状态切换,很多年前似乎也遇到过这个失效的坑,当时没记录,百度半天也没找到解决答案,最后弄了很久找到了问题所在,这里记录下,防止下次再踩坑。先贴失效的xml<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> &l原创 2022-01-22 11:44:55 · 3864 阅读 · 0 评论 -
android ScheduledExecutorService定时器的使用
android里面可以用ScheduledExecutorService做定时器,用法如下:/** * 延迟执行和周期重复执行的线程池 */ public ScheduledExecutorService mScheduledExecutorService; public void startTest() { mScheduledExecutorService = new ScheduledThreadPoolExecutor(6);mSched原创 2022-01-18 14:36:13 · 3323 阅读 · 0 评论 -
android service开启前台通知
最近需要保活一个service,有个不那么靠谱的方法,就是把这个service和前台通知绑定在一起,这里做个记录,方便以后用到。import android.app.Notification;import android.app.NotificationChannel;import android.app.NotificationManager;import android.app.Service;import android.content.Context;import android.o原创 2022-01-18 14:29:29 · 2418 阅读 · 0 评论 -
android 弹出系统忽略电池优化对话框
最近有个需求涉及到进程保活,当手机不插电源的时候,手机锁屏关屏,系统机制可能会启动省电模式,就会休眠这个app,那么一些后台功能就用不了,有一点就是需要忽略电池优化,这里记录下代码中的调用。首先在AndroidManifest.xml中声明以下权限:<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>/** * 忽略电池优化 */原创 2022-01-17 18:06:47 · 4217 阅读 · 0 评论 -
android 关于requestLegacyExternalStorage的使用
前一段时间接入野火IM遇到一个坑,就是读取不了外部存储的文件,一开始的读写权限我就发现不对,我的感觉告诉我肯定还是权限问题,一开始以为是provider没设置好,搞了很久都不行,如下图所示:发现差异了吧,明显野火demo的权限更高,最后经过一番搜索,终于找到问题所在了,这里做个记录,原来是安卓10开始,要想访问外部存储的所有文件,除了动态申请权限 和 权限申明外,必须在主工程AndroidManifest.xml中加上一句话,android:requestLegacyExternal..原创 2021-07-24 14:11:55 · 11452 阅读 · 9 评论 -
android 生成前台通知渠道 NotificationChannel
android 8.0系统开始加入了一个新功能,就是可以生成前台通知渠道,用于自定义声音,震动等快捷操作,如果想一直常住于通知栏,在自定义的Service中调用startForeground(notifyID, notification);就可以了,代码例子如下:if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationManager notificationManager = (Notif.原创 2021-07-19 18:07:15 · 1615 阅读 · 3 评论