1. 程式人生 > >Android 5.0以後版本開啟“有權檢視使用情況的應用”

Android 5.0以後版本開啟“有權檢視使用情況的應用”


      前段時間曾做過一個應用鎖的功能,但是在android5.0版本後獲取棧頂應用的方法getRunningTask方法被google給遮蔽掉了,然後在網上各種找資料啊,最後找到一個折中的辦法,使用UsageStatsManager獲取,但是這種獲取方法需要使用者在手機上賦予APP許可權才可以使用,就是在安全-高階-有權檢視使用情況的應用 在這個模組中勾選上指定APP就可以獲取到棧頂的應用名。那麼現在問題來了,如何呼叫系統提供的常量開啟“有權檢視使用許可權的應用”介面。

    知道最近才偶然發現 Settings.ACTION_USAGE_ACCESS_SETTINGS 這個常量就是跳轉到介面的值。

找到準確的值來那就好辦了:

首先 根據此常量可以判斷當前裝置中有沒有“有權檢視使用許可權的應用”這個選項,雖說這個選項是android 系統中自帶的,但是現在國內很多廠商ROM眾多,很多都給閹割掉了,例如:小米、魅族只流。

下面上程式碼:

判斷當前裝置中有沒有“有權檢視使用許可權的應用”這個選項

private boolean isNoOption() {
        PackageManager packageManager = getApplicationContext()
                .getPackageManager();
        Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
        List<ResolveInfo> list = packageManager.queryIntentActivities(intent,
                PackageManager.MATCH_DEFAULT_ONLY);
        return list.size() > 0;
    }

判斷呼叫該裝置中“有權檢視使用許可權的應用”這個選項的APP有沒有開啟

<span style="color:#000000;"> private boolean isNoSwitch() {
        long ts = System.currentTimeMillis();
        UsageStatsManager usageStatsManager = (UsageStatsManager) getApplicationContext()
                .getSystemService("usagestats");
        List<UsageStats> queryUsageStats = usageStatsManager.queryUsageStats(
                UsageStatsManager.INTERVAL_BEST, 0, ts);
        if (queryUsageStats == null || queryUsageStats.isEmpty()) {
            return false;
        }
        return true;
    }</span>
然後就是跳轉的程式碼了:
<span style="color:#000000;">if (isNoOption()) {
            buttonGuide.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(
                            Settings.ACTION_USAGE_ACCESS_SETTINGS);
                    startActivity(intent);
                }
            });</span>

最後 千萬不要忘了新增許可權:
<uses-permission
        android:name="android.permission.PACKAGE_USAGE_STATS"
        tools:ignore="ProtectedPermissions" />

好了,到此結束。