Android UsageStatsManager的使用

背景:在做一個App Lockdemo,完全從應用層的層面去實現。

5.0以下通過ActivityManager類的getRunningTasks()獲取當前打開的所有應用程序 。

5.0版本之後廢棄了getRunningTasks()方法,意味着我們在5.0以後不能通過該方法獲取正在運行的應用程序,google5.0又提供類新的api,可以通過ActivityManagergetRunningAppProcesses()方法獲取正在運行的應用程序 。

然後在5.1的版本發佈後getRunningAppProcesses()已經獲取不到正在運行的服務,在5.0版本google提供了一個UsageStatsManager類,通過這個類可以獲取到應用程序的運行情況。

 

使用方法:

1 添加權限:

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

添加了這個權限以後,在設置界面的“有權查看使用情況的應用”中就可以看到我們的這個應用了。

2 引導用戶進入授權界面授權:

我們通過啓動ActionSettings.ACTION_USAGE_ACCESS_SETTINGSactivity,引導用戶進入“有權查看使用情況的應用”界面,將應用的這個權限打開,否則後面獲取信息時是獲取不到信息的。

3 真正的代碼使用:

1)調用相關代碼獲取棧頂的activity的方法:

usm = ((UsageStatsManager) getSystemService(Context.USAGE_STATS_SERVICE));
long endTime = System.currentTimeMillis();
long startTime = endTime - 10000;
//查詢這段時間內的所有使用事件
UsageEvents usageEvents = usm.queryEvents(startTime, endTime);
UsageEvents.Event event = new UsageEvents.Event();
//遍歷這個事件集合,如果還有下一個事件
while (usageEvents.hasNextEvent()){
    //得到下一個事件放入event中,先得得到下個一事件,如果這個時候直接調用,則	event的package是null,type是0。
    usageEvents.getNextEvent(event);
    Log.d("sjx","package == "+event.getPackageName()+",  type == "+event.getEventType());
    //如果這是個將應用置於前臺的事件
    if(event.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND){
        //獲取這個前臺事件的packageName.
        topPackageName = event.getPackageName();
        //Log.d("sjx","topPackageName == " + topPackageName);
    }
}

這樣通過之前10s到當前時間的應用使用情況,獲取app置於前臺的時間,拿到該事件的packageName,就獲取了位於棧頂的activity,在AppLock的實現中,是有一個無限循環,每隔300s,調用上面的方法獲取一下位於棧頂的activity,然後通過判斷要不要打開加鎖界面。

 

2)獲取一段時間內的應用的使用情況:

調用UsageStatsManagerqueryUsageStats(int intervalType, long beginTime, long endTime)方法,其中參數:

a) intervalType:時間間隔類型,有五種

INTERVAL_DAILY: 日長短級別數據,最長7天內的數據;

INTERVAL_WEEKLY: 星期長短級別數據,最長4個星期內的數據;

INTERVAL_MONTHLY: 月長短級別數據,最長6個月內的數據;

INTERVAL_YEARLY: 年長短級別數據,最長2年內的數據,也就是說,數據最長保存2;

INTERVAL_BEST: 根據提供的時間間隔(根據與第二個參數和第三個參數獲取),自動搭配最好的級別

b) beginTime:開始統計的時間

c) endTime:結束的時間

返回值爲:List<UsageStats>。

這樣我們獲得了一段時間內的所有應用的使用情況的數據。

通過UsageStats類提供的方法再得到應用具體的使用數據。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章