1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      Android開發(fā)中怎么使用記錄訪問權(quán)限

      Android開發(fā)中怎么使用記錄訪問權(quán)限?針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

      建網(wǎng)站原本是網(wǎng)站策劃師、網(wǎng)絡(luò)程序員、網(wǎng)頁設(shè)計師等,應(yīng)用各種網(wǎng)絡(luò)程序開發(fā)技術(shù)和網(wǎng)頁設(shè)計技術(shù)配合操作的協(xié)同工作。成都創(chuàng)新互聯(lián)公司專業(yè)提供網(wǎng)站建設(shè)、成都做網(wǎng)站,網(wǎng)頁設(shè)計,網(wǎng)站制作(企業(yè)站、響應(yīng)式網(wǎng)站設(shè)計、電商門戶網(wǎng)站)等服務(wù),從網(wǎng)站深度策劃、搜索引擎友好度優(yōu)化到用戶體驗的提升,我們力求做到極致!

      什么是使用記錄訪問權(quán)限

      這是在Android5.0(Api level 21)新添加的,通過該權(quán)限我們可以查看設(shè)備上其它應(yīng)用使用情況的統(tǒng)計信息等。

      如何使用該權(quán)限呢?

      首先在manifest中添加:

      由于該權(quán)限默認(rèn)只授予系統(tǒng)應(yīng)用,所以添加了ignore屬性。

      然后通過如下代碼進(jìn)而手動打開權(quán)限:

      Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
      startActivityForResult(intent);

      當(dāng)然只要我們在manifest中進(jìn)行了權(quán)限配置,也可以通過設(shè)置->安全->有權(quán)查看使用情況的應(yīng)用來打開權(quán)限:

      Android開發(fā)中怎么使用記錄訪問權(quán)限

      到此我們的應(yīng)用就擁有了該權(quán)限。那么有了這個權(quán)限到底能做什么呢?繼續(xù)往下看......

      前段時間和同事聊到了一個叫我要當(dāng)學(xué)霸的app,里邊有個學(xué)習(xí)監(jiān)督的功能,就需要使用記錄訪問權(quán)限,當(dāng)打開權(quán)限后,除了自己和桌面外,其它app都不能正常使用,點擊其它app時會直接退到后臺并彈出一個提示頁面。不妨我們來模擬下這個功能。

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

      public final class UsageStatsManager {
       public static final int INTERVAL_BEST = 4; //根據(jù)提供的開始、結(jié)束時間決定時間間隔
       public static final int INTERVAL_DAILY = 0; //以天為時間間隔(最長7天)
       public static final int INTERVAL_MONTHLY = 2; //以月為時間間隔(最長6個月)
       public static final int INTERVAL_WEEKLY = 1; //以周為時間間隔(最長4個星期)
       public static final int INTERVAL_YEARLY = 3; //以年為時間間隔(最長2年)
      
       UsageStatsManager() {
       throw new RuntimeException("Stub!");
       }
      
       public List queryUsageStats(int intervalType, long beginTime, long endTime) {
       throw new RuntimeException("Stub!");
       }
      
       public List queryConfigurations(int intervalType, long beginTime, long endTime) {
       throw new RuntimeException("Stub!");
       }
      
       public UsageEvents queryEvents(long beginTime, long endTime) {
       throw new RuntimeException("Stub!");
       }
      
       public Map queryAndAggregateUsageStats(long beginTime, long endTime) {
       throw new RuntimeException("Stub!");
       }
      
       public boolean isAppInactive(String packageName) {
       throw new RuntimeException("Stub!");
       }
      }

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

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

      private void getTopApp() {
       UsageStatsManager mUsageStatsManager = (UsageStatsManager) getSystemService(Context.USAGE_STATS_SERVICE);//usagestats
       long time = System.currentTimeMillis();
       List usageStatsList = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_BEST, time - 2000, time);
      
       if (usageStatsList != null && !usageStatsList.isEmpty()) {
        SortedMap usageStatsMap = new TreeMap<>();
        for (UsageStats usageStats : usageStatsList) {
        usageStatsMap.put(usageStats.getLastTimeUsed(), usageStats);
        }
        if (!usageStatsMap.isEmpty()) {
        String topPackageName = usageStatsMap.get(usageStatsMap.lastKey()).getPackageName();
      
        if (getLauncherPackageName(mContext).equals(topPackageName) || "com.othershe.test".equals(topPackageName)) {
         return;
        }
      
        Log.e("TopPackage Name", topPackageName);
      
        //模擬home鍵點擊
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.addCategory(Intent.CATEGORY_HOME);
        startActivity(intent);
      
        //啟動提示頁面
        Intent intent1 = new Intent(mContext, TipActivity.class);
        intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent1);
        }
       }
       }

      因為時間周期是2秒,所以這里我們采用INTERVAL_BEST作為時間間隔。其中的UsageStats對象對應(yīng)一個查詢到的app數(shù)據(jù),主要包含以下信息:

      Android開發(fā)中怎么使用記錄訪問權(quán)限

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

      @Override
       public int onStartCommand(Intent intent, int flags, int startId) {
      
       mTimer = new Timer();
       TimerTask task = new TimerTask() {
        @Override
        public void run() {
        getTopApp();
        }
       };
      
       mTimer.schedule(task, 1000, 500);
       return super.onStartCommand(intent, flags, startId);
       }

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

      Android開發(fā)中怎么使用記錄訪問權(quán)限

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

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

      private void getHistoryApps() {
       Calendar calendar = Calendar.getInstance();
       long endTime = calendar.getTimeInMillis();
       calendar.add(Calendar.YEAR, -1);
       long startTime = calendar.getTimeInMillis();
      
       UsageStatsManager mUsageStatsManager = (UsageStatsManager) getSystemService(Context.USAGE_STATS_SERVICE);
       List usageStatsList = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_YEARLY, startTime, endTime);
      
       if (usageStatsList != null && !usageStatsList.isEmpty()) {
        HashSet set = new HashSet<>();
        for (UsageStats usageStats : usageStatsList) {
        set.add(usageStats.getPackageName());
        }
      
        if (!set.isEmpty()) {
        Log.e("size", set.size() + "");
        }
       }
       }

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

      Android開發(fā)中怎么使用記錄訪問權(quán)限

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

      其實對于網(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é)算的,因為這屬于同一設(shè)備上的重復(fù)下載,這樣對公司而言就是虧損的。

      有了歷史包名信息,我們就可以判斷用戶在一定的時間周期內(nèi)是否安裝過對應(yīng)的app,進(jìn)而采取相應(yīng)的策略,這樣可以在一定程度降低損失。當(dāng)然有個前提,你要友好的引導(dǎo)用戶開啟權(quán)限。

      關(guān)于Android開發(fā)中怎么使用記錄訪問權(quán)限問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。


      文章題目:Android開發(fā)中怎么使用記錄訪問權(quán)限
      分享網(wǎng)址:http://www.ef60e0e.cn/article/jipjjc.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        元谋县| 江安县| 正定县| 安多县| 永川市| 宜城市| 宁强县| 轮台县| 道孚县| 当雄县| 民县| 闵行区| 满洲里市| 乌兰浩特市| 瓮安县| 临颍县| 潮安县| 金门县| 巨野县| 和林格尔县| 义乌市| 同江市| 元朗区| 廉江市| 区。| 永城市| 措勤县| 陈巴尔虎旗| 林芝县| 石泉县| 台州市| 中牟县| 仙游县| 枣阳市| 石柱| 金昌市| 霍邱县| 吴忠市| 南召县| 澄城县| 玉田县|