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

yangxi_001發表於2016-04-13

轉自:http://blog.csdn.net/chaozhung_no_l/article/details/49490401

       前段時間曾做過一個應用鎖的功能,但是在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有沒有開啟

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;  
} 
然後就是跳轉的程式碼了:

if (isNoOption()) {  
    buttonGuide.setOnClickListener(new OnClickListener() {  
  
    @Override  
    public void onClick(View v) {  
        Intent intent = new Intent(  
            Settings.ACTION_USAGE_ACCESS_SETTINGS);  
        startActivity(intent);  
    }  
});
最後 千萬不要忘了新增許可權:

<uses-permission  
    android:name="android.permission.PACKAGE_USAGE_STATS"  
    tools:ignore="ProtectedPermissions" />


好了,到此結束。


相關文章