23.后台弹出界面
Android Q之后的后台弹出需要申请悬浮窗权限(6.0后悬浮窗权限默认关闭,需要动态申请),如果是小米,vivo,oppo需要另外申请权限
/**
* 小米后台弹出界面检测方法
*
* @param context
* @return
*/
public static boolean canBackgroundStart(Context context) {
AppOpsManager ops = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
ops = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
}
try {
int op = 10021;
Method method = ops.getClass().getMethod("checkOpNoThrow", new Class[]{int.class, int.class, String.class});
Integer result = (Integer) method.invoke(ops, op, android.os.Process.myUid(), context.getPackageName());
return result == AppOpsManager.MODE_ALLOWED;
} catch (Exception e) {
}
return false;
}
/**
* 判断vivo后台弹出界面
*
* @param context
* @return
*/
public static boolean getvivoBgStartActivityPermissionStatus(Context context) {
String packageName = context.getPackageName();
Uri uri2 = Uri.parse("content://com.vivo.permissionmanager.provider.permission/start_bg_activity");
String selection = "pkgname = ?";
String[] selectionArgs = new String[]{packageName};
try {
Cursor cursor = context
.getContentResolver()
.query(uri2, null, selection, selectionArgs, null);
if (cursor != null) {
if (cursor.moveToFirst()) {
int currentmode = cursor.getInt(cursor.getColumnIndex("currentstate"));
cursor.close();
return true;
} else {
cursor.close();
return false;
}
}
} catch (Throwable throwable) {
throwable.printStackTrace();
}
return false;
}
24.唯一设备码问题
1.android q之后将不再能获取设备imei码
2.android id在androi8.0之后将不再唯一,即不同应用的获取到的android id不一样 原文如下:
现在,平台改变了标识符的处理方式。 对于在 OTA 之前安装到某个版本 Android 8.0 ( API 级别 26 )的应用,除非在 OTA 后卸载并重新安装,否则 ANDROID_ID 的值将保持不变。要在 OTA 后在卸载期间保留值,开发者可以使用密钥 /值备份关联旧值和新值。 对于安装在运行 Android 8.0 的设备上的应用,ANDROID_ID 的值现在将根据应用签署密钥和用户确定作用域。应用签署密钥、用户和设备的每个组合都具有唯一的 ANDROID_ID 值。因此,在相同设备上运行但具有不同签署密钥的应用将不会再看到相同的 Android ID (即使对于同一用户来说,也是如此)。 只要签署密钥相同(并且应用未在 OTA 之前安装到某个版本的 O ),ANDROID_ID 的值在软件包卸载或重新安装时就不会发生变化。 即使系统更新导致软件包签署密钥发生变化,ANDROID_ID 的值也不会变化。 要借助一个简单的标准系统实现应用获利,请使用广告 ID。广告 ID 是 Google Play 服务针对广告服务提供的唯一 ID,此 ID 可由用户重置。