前言
最近MIUI13上出了个未经应用商店安装,算是未知来源。AndroidID,通知,网络权限没授权则默认关闭。
安装app时允许虚拟身份ID:
-
允许允许虚拟身份ID前获取一次AndroidId:
attachBaseContext获取AndroidId, 此时还没有点允许虚拟身份ID,此时获取的AndroidId:0000000000000000,允许虚拟身份后后再获取也是不会变化的,需要杀进程重新打开app才能获取正确的AndroidId。 -
允许虚拟身份ID后获取AndroidID:
点允许虚拟身份ID后,再获取AndroidID正常,不需要杀进程重启app进程。
安装app时不允许虚拟身份ID:
- 获取AndroidID返回0000000000000000
- 系统设置->app权限:允许手机信息 后,获取AndroidID依然返回 0000000000000000
一旦用户点击确认,该权限弹框就不再弹出。
有一个业务场景需要有该弹框弹出的恢复机制,可以通过清除应用数据达到目的。
解决方法一:
在app里直接调用系统接口clearApplicationUserData进行清除
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
if (am != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
boolean ret = am.clearApplicationUserData();
Log.w(TAG, "Clear application user data result:" + ret);
}
解决方法二:
在app里直接执行命令pm clear packageName
public static Process clearAppUserData(String packageName) {
Process p = execRuntimeProcess("pm clear " + packageName);
return p;
}
public static Process execRuntimeProcess(String commond) {
Process p = null;
try {
p = Runtime.getRuntime().exec(commond);
} catch (IOException e) {
e.printStackTrace();
}
return p;
}