2015-11-14 100 views
3

我試圖讓運行從包名稱活動名稱(前臺活動名稱),大家都知道,我們可以得到目前通過這條線從包名獲取前臺活動?

mActivityManager.getRunningTasks(1).get(0).topActivity.getClassName() 

運行活動名稱
但這項工作只有波紋管的android 5.0我需要在5.0以上

同樣的事情,我能夠獲得當前包的名字,但沒有活動

回答

5

安全從Android電子棒棒糖增強;請參閱此文章以獲取更多詳細信息:getAppTask

您可以通過UsageStats類獲得前臺活動;首先,你必須在你的清單中添加該權限:

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

與此聲明:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
package="your_application_package"> 

這將禁用警告權限是系統級的,不會被授予第三方應用。設備的用戶可以通過設置應用程序授予權限。

所以,在的onCreate()您的MainActivity的方法,檢查用戶是否授予該權限,

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) { 
     if(!hasPermission()){ 
      startActivityForResult(
        new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS), 
        Constant.MY_PERMISSIONS_REQUEST_PACKAGE_USAGE_STATS); 
     } 
    } 

,如果沒有,請用戶來啓用它:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == Constant.MY_PERMISSIONS_REQUEST_PACKAGE_USAGE_STATS){ 
     if (!hasPermission()){ 
      startActivityForResult(
        new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS), 
        Constant.MY_PERMISSIONS_REQUEST_PACKAGE_USAGE_STATS); 
     } 
    } 
} 
private boolean hasPermission() { 
    AppOpsManager appOps = (AppOpsManager) 
      getSystemService(Context.APP_OPS_SERVICE); 
    int mode = 0; 
    if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.KITKAT) { 
     mode = appOps.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS, 
       android.os.Process.myUid(), getPackageName()); 
    } 
    return mode == AppOpsManager.MODE_ALLOWED; 
} 

最後,這裏有一個片段在後臺服務,這給你包當前前景活動的名稱:

@TargetApi(Build.VERSION_CODES.LOLLIPOP) 
private String getUsageStatsForegroundActivityName() { 


    UsageStatsManager mUsageStatsManager = (UsageStatsManager) MyApplication.getInstance().getSystemService(Context.USAGE_STATS_SERVICE); 
    long endTime = System.currentTimeMillis(); 
    long beginTime = endTime - 1000 * 60; 

    // result 
    String topActivity = null; 

    // We get usage stats for the last minute 
    List<UsageStats> stats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, beginTime, endTime); 

    // Sort the stats by the last time used 
    if (stats != null) { 
     SortedMap<Long, UsageStats> mySortedMap = new TreeMap<Long, UsageStats>(); 
     for (UsageStats usageStats : stats) { 
      mySortedMap.put(usageStats.getLastTimeUsed(), usageStats); 
     } 
     if (mySortedMap != null && !mySortedMap.isEmpty()) { 
      topActivity = mySortedMap.get(mySortedMap.lastKey()).getPackageName(); 
      logger.info("topActivity: " + topActivity); 
     } 
    } 
    if (topActivity != null) 
     return topActivity; 
    else 
     return Constant.ACTIVITY_NOT_FOUND; 

} 
+0

如何使用hasPermi ssion() – Vishnu

+0

我更新了我的答案並添加了hasPermission()方法 –

+0

您可以發佈整個班級嗎?我發現您的課程出現了一些錯誤,如「Constant.MY_PERMISSIONS_REQUEST_PACKAGE_USAGE_STATS」 – user3051460