Java OpenResty Spring Spring Boot MySQL Redis MongoDB PostgreSQL Linux Android Nginx 面试 小程序 Arthas JVM AQS juc Kubernetes Docker 诊断工具


Android 有权查看使用权限的应用

Android 大约 2054 字

有权查看使用权限的应用

Android5.0版本后获取栈顶应用的方法getRunningTask方法被Google给屏蔽掉了。

使用UsageStatsManager获取,但是这种获取方法需要用户在手机上赋予APP权限才可以使用,就是在安全-高级-有权查看使用情况的应用。

  • 权限
<uses-permission  
        android:name="android.permission.PACKAGE_USAGE_STATS"  
        tools:ignore="ProtectedPermissions" />  
  • 判断当前设备中有没有“有权查看使用权限的应用”这个选项
private boolean hasUsageAccessSettingsOption() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        PackageManager packageManager = getPackageManager();
        Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
        List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
        return list.size() > 0;
    } else {
        return false;
    }
}
  • 判断调用该设备中“有权查看使用权限的应用”这个选项的APP有没有打开
private boolean isUsageStatsServiceOpen() {
    List<UsageStats> queryUsageStats = null;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
        UsageStatsManager usageStatsManager = (UsageStatsManager) getSystemService(Context.USAGE_STATS_SERVICE);
        queryUsageStats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_BEST, 0, System.currentTimeMillis());
    }
    if (queryUsageStats == null || queryUsageStats.isEmpty()) {
        return false;
    }
    return true;
}
  • startActivityForResult打开“有权查看使用情况的应用”页面
private void startUsageAccessSettingsActivity() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
        startActivityForResult(intent,100);
    }
}
  • onActivityResult再作判断
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 100) {
        boolean serviceOpen = isUsageStatsServiceOpen();
        if (!serviceOpen) {
            Toast.makeText(getApplicationContext(), "请在设置界面开启", Toast.LENGTH_SHORT).show();
        } else {
            //TODO 已打开
        }
    }
}
阅读 6636 · 发布于 2019-04-13

————        END        ————

Give me a Star, Thanks:)

https://github.com/fendoudebb

扫描下方二维码关注公众号和小程序↓↓↓

扫描二维码关注我
昵称:
随便看看 换一批