2015-09-28 102 views
0

使用蜂窩數據和WiFi數據的記錄我要訪問的數據使用的Android手機應用程序級別。訪問在Android手機

在我的手機棒棒糖5.1,它提供了數據使用的一個美麗的圖形&設置來限制使用。我認爲這個功能來自Kitkat更新。

我希望這個紀錄,如果沒有公共API,是否有任何其他方式做到這一點?

+0

試試這個ANS http://stackoverflow.com/a/24535172/3678308 –

回答

0

首先,要獲取數據,你應該使用UsageStatsManager或ActivityManager,這取決於SDK版本您正在使用。下面是一個簡單的例子來獲得當前正在運行的應用程序的名稱:

 String currentApp = "NULL"; 
     if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { 
      UsageStatsManager usm = (UsageStatsManager) activity.getSystemService(Context.USAGE_STATS_SERVICE); 
      long time = System.currentTimeMillis(); 
      List<UsageStats> appList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 1000, time); 
      if ((appList != null) && (appList.size() > 0)) { 
       SortedMap<Long, UsageStats> mySortedMap = new TreeMap<Long, UsageStats>(); 
       for (UsageStats usageStats : appList) { 
        mySortedMap.put(usageStats.getLastTimeUsed(), usageStats); 
       } 
       if ((mySortedMap != null) && (!(mySortedMap.isEmpty()))) { 
        currentApp = mySortedMap.get(mySortedMap.lastKey()).getPackageName(); 
       } 
      } 
     } else { 
      ActivityManager activityManager = (ActivityManager) currentlyDisplayedScreen.getSystemService(Context.ACTIVITY_SERVICE); 
      List<RunningTaskInfo> services = activityManager.getRunningTasks(Integer.MAX_VALUE); 
      currentApp = services.get(0).topActivity.getPackageName().toString() 
     } 

這些類可以用來獲得其他有用的數據,以及包括每個應用程序有多少時間是在前臺。如果您使用此,您將需要以下權限:

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

我不知道你是否可以複製使用統計圖表本身,而是我用Android的畫布上繪製各種東西,包括豐富多彩顯示不同類別數據的圖表。您可以創建自定義視圖,其覆蓋的onDraw()方法,根據當前的數據繪製圖表您有:

public class StatisticsChartView extends View { 
    ... 
    @Override 
    protected void onDraw(Canvas canvas) { 
     if (values != null) { 
      float sliceStartPoint = 200; 
      path.addCircle(rectF.centerX(), rectF.centerY(), 250, Direction.CW); 
      canvas.clipPath(path, Op.DIFFERENCE); 
     ... 
} 

我的假設是,你想擁有自己的應用程序中的圖表,但如果你想你可以簡單地用一個適當的意圖啓動設備的Android的數據使用屏幕: Which Intent for Settings - Data usage 但是,那麼你只是瀏覽到外部屏幕。