3
我試圖讓運行從包名稱活動名稱(前臺活動名稱),大家都知道,我們可以得到目前通過這條線從包名獲取前臺活動?
mActivityManager.getRunningTasks(1).get(0).topActivity.getClassName()
運行活動名稱
但這項工作只有波紋管的android 5.0我需要在5.0以上
同樣的事情,我能夠獲得當前包的名字,但沒有活動
我試圖讓運行從包名稱活動名稱(前臺活動名稱),大家都知道,我們可以得到目前通過這條線從包名獲取前臺活動?
mActivityManager.getRunningTasks(1).get(0).topActivity.getClassName()
運行活動名稱
但這項工作只有波紋管的android 5.0我需要在5.0以上
同樣的事情,我能夠獲得當前包的名字,但沒有活動
安全從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;
}
如何使用hasPermi ssion() – Vishnu
我更新了我的答案並添加了hasPermission()方法 –
您可以發佈整個班級嗎?我發現您的課程出現了一些錯誤,如「Constant.MY_PERMISSIONS_REQUEST_PACKAGE_USAGE_STATS」 – user3051460