1、Android8.0 启动 出错 Not allowed tostart service Intent{包名}app is in bacnkground uid UidRecord
错误原因:Android8.0不在允许后台service直接通过startservice方式去启动
解决方法:修改为startForgeroundService方式启动
注意要做一下版本判断如下:
2、android8.0 非全透明Activity禁用设置orientation,出错如下:
错误原因:提高用户体验。手机取消app启动白屏或黑屏的时候,将Splash界面设置了透明,然而又设置了方向,从而导致。(错误原因不是很详细,请自行百度)
解决方法一:
在style设置如下属性:
在清单文件报错activity theme引用此style
解决方法二:
附链接:https://blog.csdn.net/starry_eve/article/details/82777160
在onCreate的时候先判断,如果透明,直接把方向改为SCREEN_ORIENTATION_UNSPECIFIED
然后在设置方向的时候如果透明,直接不执行:
3、android 9.0 限制非Activity场景启动activity
从Android 9.0开始,只有当Intent flag中指定了FLAG_ACTIVITY_NEW_TASK,才允许在非Activity场景启动Activity。如果不在Intent添加FLAG_ACTIVITY_NEW_TASK,将无法通过非Activity的Context启动一个Activity,并且会抛异常。
非activity场景启动activity正确示例如下:
注意:非Activity场景下启动activity必须要加: intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
4、在Android 9.0版本后,必须授予FOREGROUND_SERVICE,
才能使用前台服务,否则抛出SecurityException异常。
解决方法:只需要在清单文件添加这个权限而已,这个是普通权限不用动态申请
5、Android 9.0后,隐式广播全面禁止,在清单文件注册的Receiver不能生效。
隐式广播(静态广播)如下:
必须修改为代码动态注册如下:
6.android 7.0 FileProvider使用 (凡是用到uri都要进行版本判断)
FileProvider的使用包括以下内容:
第一步:定义FileProvider:
android:authorities="${applicationId}.fileprovider" //URI权限
android:exported=“false” //FileProvider不需要公开
android:grantUriPermissions=“true”> //允许您授予对文件的临时访问权
//需要定义一个XML 共享文件
如图:
第二步:定义XML: gdt_file_path
如图:
第三步: 使用判断版本 分开处理 转换临时权限
File file = new File(path);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
//如果是7.0以上,执行以下
sendIntent.putExtra(Intent.EXTRA_STREAM, FileProvider.getUriForFile(context.getApplicationContext(),
context.getPackageName() + “.fileprovider”, file));
} else {
//如果是7.0以下,执行以下
}
如图:
7.Android6.0 特殊权限 修改系统设置:WRITE_SETTINGS
当点击某操作时没有成功,但未崩溃 错误如下:
java.lang.SecurityException: org.musicplayer.mp3playerpro.fugu was not granted this permission: android.permission.WRITE_SETTINGS.
解决办法如下:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
//大于等于23 请求权限
if ( !Settings.System.canWrite(getApplicationContext())){
Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
intent.setData(Uri.parse(“package:” + getPackageName()));
startActivityForResult(intent,200 );
}
}
如图:
重写 onActivityResult 方法
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 200) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
//Settings.System.canWrite方法检测授权结果
if (Settings.System.canWrite(getApplicationContext())) {
Toast.makeText(this, “已授权”, Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this, “未授权”, Toast.LENGTH_SHORT).show();
}
}
}
}
如图:
注:以上只是部分功能适配解决办法,如有错误请不吝赐教
转载 请注明出处