Android开发
牛八少爷
工欲善其事,必先利其器
展开
-
EventBus发送一次,接收两次的问题,这种多是EventBus注册和取消注册混乱导致的
1. 错误描述ActivityA跳转ActivityB后,ActivityB发送一个post请求,但是接收到两个Event回调;2. 错误原因ActivityA跳转ActivityB后,虽然ActivityA在OnDestory()中取消了注册,但是ActivityB接收Event回调是ActivityA的EventBus还没有取消注册,这个和Activity的生命周期有关;3. 解决方案在ActivityA跳转ActivityB之前就调用EventBus的取消注册; ... EventB原创 2022-03-31 10:55:19 · 2321 阅读 · 0 评论 -
App退出后不想在任务管理器列表中显示只需activity添加excludeFromRecents
App退出后不想在任务管理器列表中显示,只需要在AndroidManifest.xml中的启动Activity添加android:excludeFromRecents=“true”true:不在任务管理器列表显示false:在任务管理器列表显示原创 2022-03-31 10:44:54 · 2215 阅读 · 0 评论 -
Android app打开系统界面设置悬浮窗权限
1. AndroidManifest.xml添加权限<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />2. 打开系统开启悬浮窗界面 if (!Settings.canDrawOverlays(context)) { Intent intent = new Intent(); intent.setAction(Se原创 2021-09-09 11:21:23 · 7596 阅读 · 0 评论 -
RelativeLayout的wrap_content失效解决使用FrameLayout替代
1. 错误描述如果RelativeLayout的高度设置wrap_content时,如果有子控件设置 android:layout_alignParentBottom="true"就会占满屏幕。<RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> ... <LinearLayout android:layou原创 2021-09-09 10:17:25 · 1094 阅读 · 0 评论 -
解决Android弹出Dialog小米手机需要打开“后台弹出界面”的权限问题
在Application中添加以下代码并调用: private boolean isAllowed() { AppOpsManager ops = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE); try { int op = 10021; Method method = ops.getClass().getMethod("checkOpNoThrow", n原创 2021-08-25 16:30:28 · 2455 阅读 · 1 评论 -
使用AndroidStudio查看各个版本SDK对应的市场占有率
1. 点击“AVD Manager”2.原创 2021-06-16 14:05:55 · 1229 阅读 · 0 评论 -
转载-如果你不熟悉Material Design,请一口吃下这篇干货!
转载:https://www.uisdc.com/material-design-knowledge为您准备了最新的 Material Design设计规范,请伴随笔记一口吃掉。一、安卓是什么?想象一下,过年同学聚会上,大家把手机都放在饭桌前,除了各种型号的 iPhone 之外,你还能看到什么品牌的手机呢?我猜一定会有 OPPO、VIVO、魅族、小米、华为、三星对吗?也许还有一加、锤子、联想等手机品牌。这些手机全部都是使用了 Android底层构架的设备,也就是我们所说的安卓手机。它们和苹果手机原创 2021-04-16 11:08:03 · 1178 阅读 · 0 评论 -
Android的Webview如果提示:你的浏览器不支持WebGL-可能是关闭了硬件加速
1. 问题描述Android的Webview如果提示:你的浏览器不支持WebGL-2. 错误原因可能是关闭了硬件加速;设置了:webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);或者: <WebView android:id="@+id/base_web" android:layout_width="match_parent" android:layerType="原创 2021-04-15 09:29:29 · 5267 阅读 · 0 评论 -
解决Webview在加载url时会出现短暂的白色
1. 问题描述在Webview加载url时会出现短暂的白色页面,然后再进入url页面2. 原因分析因为网络原因再打开url前显示的时webview的背景色;3. 解决方案1. 设置webview父容器的背景色<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_heigh原创 2021-04-08 13:29:24 · 1312 阅读 · 2 评论 -
Activity之间跳转转动画问题-会出现桌面/白屏/黑屏后,再跳转到Activity
1. 问题描述Activity直接跳转动画问题-会出现桌面,再跳转到Activity;2. 解决方案1. 在AndroidManifest.xml中给Activity添加Theme;<activity android:name=".xxxActivity" android:launchMode="singleTask" android:theme="@style/ActivityTheme" /> .原创 2021-04-08 10:47:10 · 437 阅读 · 0 评论 -
Error: java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception:
1. 错误描述Execution failed for task ':app:mergeReleaseResources'.> Error: java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for details2. 错误分析使用AAPT2在合并资源文件时报的错误;可能出现的原因:1. 资源文件原创 2021-03-03 11:53:33 · 1669 阅读 · 0 评论 -
程序中销毁长图的必要性
在项目中经常会用到长图,有时候还会用高清图片,这样占用内存,而且容易造成OOM; 在Activity的onDestory()中要手动是否资源: eg: /** * 设置图片资源 */ int imgResourceId= getResources().getIdentifier(sImageView1, "drawable", getPackageName()); img.setImageResourc...原创 2020-06-19 11:21:18 · 256 阅读 · 0 评论 -
Androidx迁移以及库和类对应映射关系
AndroidX 将原始支持库 API 替换为androidx命名空间中的软件包。只有软件包和 Maven 工件名称发生了变化;类、方法和字段名称没有变化。前提条件执行迁移之前,请先将应用更新到最新版本。我们建议您将项目更新为使用支持库的最终版本:版本 28.0.0。这是因为,1.0.0 版本的 AndroidX 工件是与支持库 28.0.0 工件等效的二进制文件。使用 Android Studio 迁移现有项目使用 Android Studio 3.2 及更高版本,您只需从菜单栏...原创 2020-08-03 11:12:09 · 750 阅读 · 0 评论 -
java.lang.SecurityException: com.example.rxtest was not granted this permission: android.permission
1. 错误描述java.lang.SecurityException: com.example.rxtest was not granted this permission: android.permission.WRITE_SETTINGS.java.lang.SecurityException: com.example.rxtest was not granted this permission: android.permission.WRITE_SETTINGS. at android.原创 2020-07-29 11:59:26 · 7979 阅读 · 2 评论 -
GPS定位开发步骤以及流程图
目录GPS定位开发步骤1. 权限2.代码流程2.1. 获取LocationManager2.2. 判断是否支持GPS2.3. 获取定位权限2.4. 创建定位监听2.5. 判断GPS是否打开2.6. 初始化GPS定位和注册定位监听2.7. 打开GPS设置界面3. GPS定位流程图:GPS定位开发步骤1. 权限 <uses-permission android:name="android.permission.ACCESS_COARSE_LOC原创 2020-07-27 16:39:33 · 5177 阅读 · 0 评论 -
Android开发过程中出现Http请求图片不能访问
Android开发过程中突然出现Http请求图片不能访问,哎,有点坑啊; 因为Android9.0后强制使用Https请求就,就会阻塞Http请求,有两种方法可以设置usesCleartextTraffic和network-security-config来配置过滤器;可能有两种情况:1)没有配置usesCleartextTraffic=true2)配置了network-security-config解决方案:方案一:usesCleartextTraf...原创 2020-07-03 15:15:33 · 1305 阅读 · 0 评论 -
通过Apk或签名文件获取签名信息
1.通过签名文件获取签名信息keytool -list -v -keystore release.keystore2. 通过Apk来获取签名信息jarsigner -verify -verbose -certs app_signed.apk原创 2020-01-02 09:40:56 · 850 阅读 · 0 评论 -
Caused by: java.lang.IllegalStateException: Timer was canceled
1. 错误描述 Caused by: java.lang.IllegalStateException: Timer was canceled at java.util.Timer.scheduleImpl(Timer.java:558) at java.util.Timer.schedule(Timer.java:456) timer.cancel(); timer.sche...原创 2019-12-24 11:36:58 · 544 阅读 · 0 评论 -
xml配置android:keepScreenOn="true"来保持屏幕常量
保持屏幕常量的方法有很多种:1.PowerManager保持屏幕常亮官方文档:https://www.android-doc.com/reference/android/os/PowerManager.html代码:添加权限:<uses-permission android:name="android.permission.WAKE_LOCK" />Java代...原创 2019-09-16 19:03:48 · 2828 阅读 · 0 评论 -
Gson的JsonElement节点的toString()与getAsString()的区别
Gson的JsonElement节点有两个函数来获取字符串值toString()和getAsString();toString()源码: /** * Returns a String representation of this element. */ @Override public String toString() { try { Stri...原创 2019-09-06 16:14:54 · 3397 阅读 · 0 评论 -
Gson的JsonElement节点判断是否为空-isJsonNull()
App获取到Json字符串通过Gson解析时,判断某个JsonElement节点是否为空!不是通过 xx!=null或!xx.equals("null");而是通过:isJsonNull()来判断;原创 2019-09-06 16:04:00 · 6227 阅读 · 0 评论 -
Fragment嵌套时点击子Fragment出现点击事件穿透到父Fragment界面
问题:Fragment嵌套时点击子Fragment出现点击事件穿透到父Fragment界面;解决方案:在子Fragment的布局文件的最外层控件中添加android:clickable="true"这样就可以拦截事件的分发;但是,但是,但是:问题:这样会影响子Fragment布局文件中的其他控件;解决方案:所有受影响的控件都添加:android:clickable=...原创 2019-09-02 15:51:02 · 712 阅读 · 0 评论 -
Android录音上传服务器进行播放问题(amr 2 wav)
项目中需要录音上传服务器,服务器端使用浏览器播放,有2种方案:1. Android App录制wav格式音频上传服务器,服务器直接可以使用浏览器进行播放;2. Android App录制amr格式音频上传服务器,服务器对音频进行转码为wav格式进行播放;方案1:思路1:使用AudioRecord录制pcm格式音频,然后pcm转wav格式音频;思路2:使...原创 2019-08-29 18:56:55 · 1554 阅读 · 1 评论 -
AndroidStudio调试出现查看不到变量数据:No Such instance field:
1.错误描述AndroidStudio调试出现查看不到变量数据:No Such instance field:2. 错误原因因为build.gradle中添加了代码混淆;3. 解决方案关闭代码混淆: buildTypes { release { signingConfig signingConfigs.release ...原创 2019-08-20 09:52:15 · 12453 阅读 · 0 评论 -
java.lang.IllegalArgumentException: Can only use lower 16 bits for requestCode
1 错误描述java.lang.IllegalArgumentException: Can only use lower 16 bits for requestCodeat android.support.v4.app.BaseFragmentActivityGingerbread.checkForValidRequestCode(BaseFragmentActivityGingerbre...原创 2019-08-09 09:20:36 · 2035 阅读 · 0 评论 -
adb - error: no devices/emulators found
adb - error: no devices/emulators found没有发现设备:1. 没有连接数据线;2.没有安装驱动;3.usb连接设置“管理文件”4.端口被占用原创 2019-05-30 18:19:03 · 8071 阅读 · 0 评论 -
Android消息处理机制--Looper/Handler/Message
8 消息机制8.1 消息机制简介消息机制解决线程间通信!8.2 Message 常用API线程间通信的数据单元,通过message进行传递; 创建对象:Message.obtain(what); 封装的数据 int what://消息标志 int arg1; int arg2; Object obj;//保存任意数据类型 8.3 Handler处理器Han...原创 2019-05-29 00:18:30 · 450 阅读 · 0 评论 -
Android的KeyCode列表
电话键键名 描述 键值KEYCODE_CALL拨号键5 KEYCODE_ENDCALL挂机键6 KEYCODE_HOME按键Home3 KEYCODE_MENU菜单键82 KEYCODE_BACK返回键4 KEYCODE_SEARCH搜索键84 KEYCODE_CAMERA拍照键27 KEYCODE_FOCUS拍照对焦键80 KEYCODE_POWER电源键...原创 2019-05-26 15:25:37 · 280 阅读 · 0 评论 -
adb输入中文问题
adb输入中文问题:adb不支持unicode字符,只支持ASICC字符解决方案:1.下载ADBKeyBoard.apkgithub源码:https://github.com/senzhk/ADBKeyBoard百度网盘:https://pan.baidu.com/s/1zTH4V2iwF9PZKtEu_ICz6w 提取码:tnw72. 设置输入为 ADB keyboard...原创 2019-05-22 21:30:42 · 5697 阅读 · 1 评论 -
使用adb获取设备信息: failed to start daemon error: cannot connect to daemon
目录错误内容错误原因解决方案方案一:关闭对应进程方案二:修改adb端口(推荐)方案三:通过wifi链接错误内容failed to start daemonerror: cannot connect to daemon错误原因这个明显是adb的5037端口被占用了;解决方案方案一:关闭对应进程第一种关闭占用5037端口的应用程序1.查找...原创 2019-05-22 19:52:04 · 11132 阅读 · 1 评论 -
IM-客户端和服务器断开重连机制
客户端和服务器断开连接有两种情况:1.手机网络断开连接, 2.手机和服务器端口连接;1.手机网络断开连接 添加一个Broadcastreceiver广播接收器,监听到网络连接以后,调用重连方法进行重连;2.服务器断开连接2.1 服务器设置闲置自动断开为了减轻服务器压力,可以设置闲置超过设定的时间后就自动断开连接。为了解决这种情况,可以设置一个心跳功能,利用轮询的方式,每...原创 2019-09-21 19:12:58 · 2150 阅读 · 0 评论 -
Activity之间传递图片的Bitmap
某些情况下需要Activity之间传递图片的Bitmap,有一下两种方式: 1. 先保存Bitmap成图片到本地,然后再读取图片的Bitmap 2. 先把Bitmap对象转换为byte[]数组,使用Intent直接传递byte数组,但是大小不能超过512kb;Exception thrown launching activities in ProcessRecord{3ede8b9 11730:com.xx.xx/u0a9758} and...原创 2021-02-08 10:36:07 · 390 阅读 · 0 评论 -
Glide加载图片设置圆角和占位图片(加载失败)
public static RequestOptions getRequestOptions() { RequestOptions mRequestOptions = RequestOptions.circleCropTransform() .placeholder(R.drawable.icon_user);// .diskCacheStrategy(DiskCacheStrategy.NONE)//不做磁盘缓存//...原创 2021-01-23 16:39:08 · 1299 阅读 · 0 评论 -
Unable to find method ‘org.gradle.api.file.ProjectLayout.fileProperty(Lorg/gradle/api/provider/Provi
1. 错误描述Unable to find method 'org.gradle.api.file.ProjectLayout.fileProperty(Lorg/gradle/api/provider/Provider;)Lorg/gradle/api/file/RegularFileProperty;'org.gradle.api.file.ProjectLayout.fileProperty(Lorg/gradle/api/provider/Provider;)Lorg/gradle/api/f原创 2020-12-01 01:04:52 · 11987 阅读 · 3 评论 -
获取App版本号/版本名称/app名称
其他设备信息,待总结 /** * 获取app的版本号 */ public static int getVersion(Context context) { try { PackageManager manager = context.getPackageManager(); PackageInfo info = manager.getPackageInfo(context.getPackageName(),.原创 2020-09-16 16:39:59 · 425 阅读 · 0 评论 -
ANDROID_ID并非设备的序列号,获取获取硬件序列号SN(可自定义规则)
ANDROID_ID是在设备首次启动时,系统会随机生成一个64位的数字,并把这个数字以16进制的字符串保存下来,如果设备被双清/重置后第一次打开会重新生成一个64位数字;但是由于不同的厂商可能出现bug,产生相同的ANDROID_ID; 所以ANDROID_ID 不能作为设备序列号,序列号SN可以作为设备的统计数据,而且可以通过客户定制,生成写入;public static final String ANDROID_ID Added in API ...原创 2020-09-16 16:25:00 · 2631 阅读 · 0 评论 -
使用ScaleAnimation动画类只放大或缩小的功能
使用ScaleAnimation动画类只放大或缩小的功能1. 使用AnimationSet的setFillAfter设置保持结束时的状态即可:eg: animationSet.addAnimation(scaleAnimation); animationSet.setFillAfter(true);//保持结束时状态取消动画: public static void destoryAnimSet() { if (animationSet != null) {原创 2020-08-25 14:03:53 · 852 阅读 · 0 评论 -
需求:imageview点击放大移动到中心位置,点击缩小返回到原来位置
1. 需求imageview点击放大移动到中心位置,点击缩小返回到原来位置2. 问题点使用ScaleAnimation动画类imageview放大并移动后,但是点击放大后的图片不能获取点击事件,显示控件边界后 可以看到imageview其实是没有移动的;3. 解决方案1原有地方一个imageview1,2.中心位置放一个和放大后一样的imageview2,imageview1显示,imageview2隐藏;1)点击imageview1后,imageview使用ScaleAnimati原创 2020-08-25 13:57:54 · 583 阅读 · 0 评论 -
有时候获取到某些数值需要获取其对应的另外一些数值,常规做法是双层循环,但是又更高效的做法使用replace
有时候获取到某些数值需要获取其对应的另外一些数值,常规做法是双层循环,但是又更高效的做法使用replace();案例需求例如:String rule ="MO,TU,WE"; String[] weekStrArr = new String[]{"MO", "TU", "WE", "TH", "FR", "SA", "SU"}; String[] weekStrArr2 = new String[]{"周一", "周二", "周三", "周四", "周五", "周六", "周日原创 2020-08-21 16:09:06 · 151 阅读 · 0 评论 -
获取设备SN号
获取设备SN号:权限: <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!--用于读取手机当前的状态-->获取代码: /** * 获取硬件SN号 * * @return */ public static String getSN() { if (Build.VERSION.SDK_INT原创 2020-08-06 11:04:02 · 1860 阅读 · 0 评论