作者簡介 原創(chuàng)微信公眾號郭霖 WeChat ID: guolin_blog
大家早上好,新的一周開始啦!
本篇是Othershe的第三篇投稿,帶了權(quán)限?android.permission.PACKAGE_USAGE_STATS 的使用講解,希望能夠幫助到大家。
Othershe的博客地址:
http://www.itdecent.cn/u/4235f2b5b350
正文
什么是使用記錄訪問權(quán)限呢?這是在 Android5.0 新添加的,通過該權(quán)限我們可以查看設(shè)備上其它應(yīng)用使用情況的統(tǒng)計(jì)信息等。如何使用該權(quán)限呢?
首先在 manifest 中添加:
由于該權(quán)限默認(rèn)只授予系統(tǒng)應(yīng)用,所以添加了ignore屬性。然后通過如下代碼進(jìn)而手動打開權(quán)限:
當(dāng)然只要我們在manifest中進(jìn)行了權(quán)限配置,也可以通過設(shè)置->安全->有權(quán)查看使用情況的應(yīng)用來打開權(quán)限:
到此我們的應(yīng)用就擁有了該權(quán)限。那么有了這個權(quán)限到底能做什么呢?繼續(xù)往下看...
前段時間和同事聊到了一個叫我要當(dāng)學(xué)霸的app,里邊有個學(xué)習(xí)監(jiān)督的功能,就需要使用記錄訪問權(quán)限,當(dāng)打開權(quán)限后,除了自己和桌面外,其它app都不能正常使用,點(diǎn)擊其它app時會直接退到后臺并彈出一個提示頁面。不妨我們來模擬下這個功能。
在這之前我們首先看一個類?UsageStatsManager:
可以看到該類提供了五種時間間隔類型,這里我們比較關(guān)注?queryUsageStats()?方法,通過該方法我們可以得到一段時間內(nèi)其它應(yīng)用的使用情況。
我們實(shí)現(xiàn)思路是這樣的,通過 UsageStatsManager類 獲得2秒內(nèi)手機(jī)app的使用數(shù)據(jù),找到時間最近的一個,如果不是我們自己的app或桌面則模擬home鍵點(diǎn)擊,同時彈出一個提示頁面,具體的代碼如下:
因?yàn)闀r間周期是2秒,所以這里我們采用?INTERVAL_BEST?作為時間間隔。其中的UsageStats?對象對應(yīng)一個查詢到的app數(shù)據(jù),主要包含以下信息:
getTopApp()?是我們的核心方法,當(dāng)然我們需要開啟一個服務(wù),然后在服務(wù)中每隔500毫秒執(zhí)行一次上邊的方法,這樣就能起到不斷檢測的作用:
打開權(quán)限、啟動服務(wù),可以看到實(shí)際的運(yùn)行效果如下,基本符合我們的預(yù)期。
類似的道理,我們也可以判斷某個app是否在前臺運(yùn)行。
上邊我們使用了INTERVAL_BEST?時間間隔類型,還可以使用其它4個,例如使用INTERVAL_YEARLY:
上邊的代碼我們最終獲得了過去一年手機(jī)上使用過的app的包名集合(其中包括系統(tǒng)級別的):
拿到這些包名可以做什么呢?
其實(shí)對于網(wǎng)賺類型的應(yīng)用有這樣一種業(yè)務(wù)場景,就是用戶通過下載app來做任務(wù)進(jìn)而賺取收益,但是如果當(dāng)前設(shè)備通過其它網(wǎng)賺應(yīng)用已經(jīng)下載過某個app,然后卸載了,再通過你的網(wǎng)賺應(yīng)用下載。如果你不知道用戶之前安裝過該app,就需要給用戶結(jié)算相應(yīng)的收益,但是你的上游渠道是不會給你結(jié)算的,因?yàn)檫@屬于同一設(shè)備上的重復(fù)下載,這樣對公司而言就是虧損的。
有了歷史包名信息,我們就可以判斷用戶在一定的時間周期內(nèi)是否安裝過對應(yīng)的app,進(jìn)而采取相應(yīng)的策略,這樣可以在一定程度降低損失。當(dāng)然有個前提,你要友好的引導(dǎo)用戶開啟權(quán)限。
先到這里吧,更多的用法還有待進(jìn)一步探究。
Demo地址:
http://download.csdn.net/download/shehuan320_/9760025
文章原創(chuàng)作者GuoLin 書籍推薦
郭林大神原創(chuàng)android 書籍:《第一行代碼 android》
