Android使用記錄訪問權限

2021-02-13 郭霖

近日,微信上線了一個基於大數據分析的新功能「微信指數」。在搜索框輸入「微信指數」,「微信指數+搜索內容」,或者「搜索內容+微信指數」,再點擊下方的搜一搜,頁面就出來了。微信官方給出了微信指數的三種應用場景:1、捕捉熱詞,看懂趨勢;2、監測輿情動向,形成研究結果;3、洞察用戶興趣,助力精準營銷。

大家早上好,新的一周開始啦!

本篇是  Othershe 的第三篇投稿,帶了權限 android.permission.PACKAGE_USAGE_STATS 的使用講解,希望能夠幫助到大家。

Othershe 的博客地址:

http://www.jianshu.com/u/4235f2b5b350

什麼是使用記錄訪問權限呢?這是在 Android5.0 新添加的,通過該權限我們可以查看設備上其它應用使用情況的統計信息等。如何使用該權限呢?

首先在 manifest 中添加:

由於該權限默認只授予系統應用,所以添加了 ignore 屬性。然後通過如下代碼進而手動打開權限:

當然只要我們在manifest中進行了權限配置,也可以通過 設置->安全->有權查看使用情況的應用 來打開權限:

到此我們的應用就擁有了該權限。那麼有了這個權限到底能做什麼呢?繼續往下看...

前段時間和同事聊到了一個叫我要當學霸的app,裡邊有個學習監督的功能,就需要使用記錄訪問權限,當打開權限後,除了自己和桌面外,其它app都不能正常使用,點擊其它app時會直接退到後臺並彈出一個提示頁面。不妨我們來模擬下這個功能。

在這之前我們首先看一個類 UsageStatsManager:

可以看到該類提供了五種時間間隔類型,這裡我們比較關注 queryUsageStats() 方法,通過該方法我們可以得到一段時間內其它應用的使用情況。

我們實現思路是這樣的,通過 UsageStatsManager類 獲得2秒內手機app的使用數據,找到時間最近的一個,如果不是我們自己的app或桌面則模擬home鍵點擊,同時彈出一個提示頁面,具體的代碼如下:

因為時間周期是2秒,所以這裡我們採用 INTERVAL_BEST 作為時間間隔。其中的UsageStats 對象對應一個查詢到的app數據,主要包含以下信息:

getTopApp() 是我們的核心方法,當然我們需要開啟一個服務,然後在服務中每隔500毫秒執行一次上邊的方法,這樣就能起到不斷檢測的作用:

打開權限、啟動服務,可以看到實際的運行效果如下,基本符合我們的預期。

類似的道理,我們也可以判斷某個app是否在前臺運行。

上邊我們使用了INTERVAL_BEST 時間間隔類型,還可以使用其它4個,例如使用INTERVAL_YEARLY

上邊的代碼我們最終獲得了過去一年手機上使用過的app的包名集合(其中包括系統級別的):

拿到這些包名可以做什麼呢?

其實對於網賺類型的應用有這樣一種業務場景,就是用戶通過下載app來做任務進而賺取收益,但是如果當前設備通過其它網賺應用已經下載過某個app,然後卸載了,再通過你的網賺應用下載。如果你不知道用戶之前安裝過該app,就需要給用戶結算相應的收益,但是你的上遊渠道是不會給你結算的,因為這屬於同一設備上的重複下載,這樣對公司而言就是虧損的。

有了歷史包名信息,我們就可以判斷用戶在一定的時間周期內是否安裝過對應的app,進而採取相應的策略,這樣可以在一定程度降低損失。當然有個前提,你要友好的引導用戶開啟權限。

先到這裡吧,更多的用法還有待進一步探究。

Demo地址:

http://download.csdn.net/download/shehuan320_/9760025

每天學習累了,看些搞笑的段子放鬆一下吧。關注最具娛樂精神的公眾號,每天都有好心情。

如果你有好的技術文章想和大家分享,歡迎向我的公眾號投稿,投稿具體細節請在公眾號主頁點擊「投稿」菜單查看。

歡迎長按下圖 -> 識別圖中二維碼或者掃一掃關注我的公眾號:

相關焦點

  • Android應用權限大全
    appWidget服務需要訪問小插件的資料庫,只有非常少的應用才用到此權限綁定設備管理android.permission.BIND_DEVICE_ADMIN,請求系統管理員接收者receiver,只有系統才能使用綁定輸入法android.permission.BIND_INPUT_METHOD
  • 你真的了解Android權限機制嗎?
    系統包管理器會負責記錄組件的權限,所以靜態權限檢查可以從包管理器拿到權限,由運行環境或容器來執行權限檢查,這樣子可以把業務邏輯和安全決策分離開來,但是靈活性不足。那 Android 組件可不可以不預先聲明權限在 AndroidManifest.xml 中呢?答案是:可以的。Android 的動態權限執行,可以讓組件自身執行權限檢查,而不是運行環境。
  • 五種控制Android應用的權限的方法
    Google在Android框架內把各種對象(包括設備上的各類數據,傳感器,撥打電話,發送信息,控制別的應用程式等)的訪問權限進行了詳細的劃分,列出了約一百條"Android.Permission"。應用程式在運行前必須向Android系統聲明它將會用到的權限,否則Android將會 拒絕該應用程式訪問通過該"Permission"許可的內容。
  • 一次Android權限刪除經歷
    ,只允許滿足條件的使用場景才能申請權限,小編所在的項目被檢測出使用了RECEIVE_SMS權限,但是從app下的Androidmanifest文件中並未發現有該權限的註冊,所以該權限是哪裡來的呢?2.初步定位首先使用android studio查看了打包出來的apk中的Androidmanifest文件,發現其中確實存在RECEIVE_SMS權限,也就是說打包到apk中的Androidmanifest文件並不是app下的該文件,從android開發者官網中合併多個manifest文件的文檔來看,實際上打包到apk中的manifest文件是由多個menifest文件合併而來的,其合併順序如下
  • 一次 Android 權限刪除經歷
    ,只允許滿足條件的使用場景才能申請權限,小編所在的項目被檢測出使用了RECEIVE_SMS權限,但是從app下的Androidmanifest文件中並未發現有該權限的註冊,所以該權限是哪裡來的呢?2.初步定位 首先使用android studio查看了打包出來的apk中的Androidmanifest文件,發現其中確實存在RECEIVE_SMS權限,也就是說打包到apk中的Androidmanifest 文件並不是app下的該文件,從 android開發者官網中合併多個manifest文件的文檔來看,實際上打包到apk中的 manifest文件是由多個menifest文件合併而來的
  • Android權限機制,你真的了解嗎?
    一個Android應用程式如果沒有聲明任何權限,就沒有任何特權。因此,應用程式如果想訪問其他文件、數據和資源就必須在AndroidManifest.xml文件中進行聲明,以所聲明的權限去訪問這些資源。否則,如果缺少必要的權限,由於沙箱的保護,這些應用程式將不能夠正常提供所期望的功能與服務。
  • Android動態權限詳解
    -- PHONE_STATE權限--> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!
  • Android端權限隱私的合規化處理實踐
    為什麼大眾隱私意識覺醒,權限隱私安全性差會直接導致用戶不願使用;日趨嚴格的權限治理和隱私安全治理,工信部和市場的嚴格管控;客戶端作為與用戶最直接的交互信息收集入口,有義務合規化的收集和使用用戶信息。:name="android.permission.CAMERA" />1.2 動態權限授予Android自6.0(SDK版本為23)開始,將權限分為普通權限,危險權限,特殊權限。
  • SpyNote——無需Root訪問權限的新型Android遠控木馬
    E安全7月29日訊 一種新型安卓遠程訪問木馬(RAT)生成器最近在惡意軟體論壇被洩露
  • 獲取後臺位置訪問權限,您還需要注意哪些?
    用戶一直希望能更好地管理自己的位置數據,因此,我們在今年早些時候宣布了一些隱私方面的改進,例如 Google Play 位置信息權限的政策更新,以及 Android 11 中加強的位置信息權限控制。為了防止不必要的後臺位置信息訪問,更新後的政策只允許在對應用核心功能至關重要,且可提供明確的用戶利益的情況下,才能夠請求訪問。我們發現,許多請求後臺位置信息的應用實際上並不需要這些數據。
  • Android 自定義權限真的安全嗎?
    今天我們聊聊 Android 的自定義權限的安全問題。如果你對 Android 的權限機制尚覺陌生,不妨先看看官方 API 指南的這一節: Android 的權限機制 (http://developer.android.com/training/articles/security-tips.html)。
  • Android權限機制與適配經驗
    將權限分為了兩大類:普通權限和危險權限。舉個例子,控制手機震動的權限對於用戶並沒有什麼危害,只要開發者聲明了這個權限,安裝後就可以一直被授權,也不能被回收,但是,像讀取sd卡數據這類權限,很顯然就是危險權限了,APP必須向用戶申請這個權限。Google還是很體貼我們開發者的,為了進一步減少開發的工作量和申請權限對用戶的騷擾,對危險權限根據各自的屬性進行了分組。舉
  • 【手機取證:SIM卡使用記錄】
    iOS設備使用iTunes或其他工具創建手機備份,使用iBackupBot等工具瀏覽備份數據。SIM卡歷史記錄記錄保存在」WirelessDomain /Library /Database /CellularUsage.db"文件中。
  • 詳解Android 6.0運行時權限
    從Android 6.0開始,不再是安裝應用時用戶確定獲得全部的權限.而是在使用軟體過程中需要該權限時,彈出對話框讓用戶選擇權限.不僅如此,用戶選擇權限後還可以關閉。也就是說:用戶第一次點擊一個需要權限的地方,該方法返回false(因為用戶沒拒絕~),當用戶拒絕掉該權限,下次點擊此權限處,該方法會返回true。可在裡面進行對該權限的說明,然後彈出權限讓用戶選擇,並且對話框有don't ask again選項:
  • 開發並內置具有系統權限(system)的App(Android10)
    ,不能訪問系統的一些資源和功能。在系統定製過程中,如果想要自己開發的app有更多的超能力,需要將自己的app提升到系統權限。擁有了系統權限後app就會和系統的app"設置"一樣,擁有超能力做很多控制系統相關的事情。
  • Android 6.0 運行時權限處理
    >又新增了運行時權限動態檢測,以下權限都需要在運行時判斷:身體傳感器日曆攝像頭通訊錄地理位置麥克風電話簡訊存儲空間運行時權限處理Android6.0系統默認為targetSdkVersion小於23的應用默認授予了所申請的所有權限,所以如果你以前的APP設置的targetSdkVersion低於23,在運行時也不會崩潰,但這也只是一個臨時的救急策略
  • 沒有授權,Android App 也能獲取你的權限?!
    而作為用戶只有兩種選擇,一種是同意將通訊錄、麥克風、位置等權限授權給 App,繼續使用 App 為我們帶來的各種服務;另一種則是點擊「不同意」,那麼後果就是直接退出該 App,無法繼續使用。作為用戶,如果不想要正在使用的 App 讀取如通話記錄、簡訊、位置等信息,可以拒絕授權。不過近日,據國際計算機科學研究所(ICSI)的研究人員調查顯示,在觀察了來自 Google Play Store 中 8.8 萬多個應用之後,他們發現當用戶拒絕給 App 一些權限時,依然有超過 1,000 個 App 繞過權限控制,獲取到用戶精確的地理位置數據和手機序列號等個人隱私信息。
  • Android開發調試工具ADB的使用
    \android-sdk-windows\platform-tools 這個目錄,ADB工具就放在這裡。如圖:remount命令獲取上傳文件權限,否則會出現       Read-only file system 的錯誤提示信息      示例如下圖         這裡要注意的就是如果你需要向一個二級目錄裡放文件的時候,一定使用"/"而不能使用"\",原因是android是liunx下的系統,而我們用的是windows。
  • Android10 下獲取序列號和IMEI號的權限
    運行Android 10的移動計算機上訪問序列號和IMEI號的過程。需要明確授予您的應用程式訪問這些設備標識符的權限,這可以通過以下三種方式之一進行:通過StageNow 的AccessManager授權通過您的應用程式,使用EMDK配置文件管理器。
  • 一文掌握 Android 11 適配攻略
    終於開始了Android 11的適配工作。記錄一下,供需要的人參考。Android 10在AndroidManifest.xml中添加 android:requestLegacyExternalStorage="true"來適配,Android 11上直接使用File API訪問媒體文件。不得不說,等等黨的勝利?