Android手机分身或应用多开检测

@hanq  2018年06月29日 16:20

原理

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

附:


添加新评论