原理
Android 6.0的分身应用为了能与原应用区分开来,会更改手机的
UserId
,默认手机的UserId
为0,可以通过获取应用文件位置来判断是否开启了分身或多开。
代码
使用代码:
context.getFilesDir().getAbsolutePath();
获取到的App应用位置数据在各Android API下的取值如下:
- API 27
/data/user/0/packageName/files
- API 26
/data/user/0/packageName/files
- API 25
/data/user/0/packageName/files
- API 24
/data/user/0/packageName/files
- API 23
/data/user/0/packageName/files
- API 22
/data/data/packageName/files
- API 21
/data/data/packageName/files
- API 19
/data/data/packageName/files
- API 18
/data/data/packageName/files
- API 17
/data/data/packageName/files
- API 16
/data/data/packageName/files
所以使用代码:
public void isVirtualApp() {
String path = context.getFilesDir().getAbsolutePath();
if (path != null && path.length() > 0) {
if (path.startsWith("/data/user/0/") || path.startsWith("/data/data/"){
//TODO 正常应用
} else {
//TODO 分身应用
}
}
}
就可以判断出是否用户开启了手机分身或App多开。
注:
- 手机分身
UserId
为55 - 应用多开
UserId
为999
附:
- 感谢
mawei7510
文章的启发 - 感谢
求己
、本人的名字不一定需要太长
的体力劳动
xposed轻松越过