我正在創建一個應用程序鎖定應用程序,如何獲得lollipop.getRunningTaskinfo方法中的當前正在運行的任務已棄用在棒棒糖api中,然後如何解決問題。如何獲取TopActivity名稱或獲取棒棒糖當前正在運行的應用程序包名稱?
回答
試試這個:
ActivityManager mActivityManager =(ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE);
if(Build.VERSION.SDK_INT > 20){
String mPackageName = mActivityManager.getRunningAppProcesses().get(0).processName;
}
else{
String mpackageName = mActivityManager.getRunningTasks(1).get(0).topActivity.getPackageName();
}
我們可以得到使用usagestats機:
public static String getTopAppName(Context context) {
ActivityManager mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
String strName = "";
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
strName = getLollipopFGAppPackageName(context);
} else {
strName = mActivityManager.getRunningTasks(1).get(0).topActivity.getClassName();
}
} catch (Exception e) {
e.printStackTrace();
}
return strName;
}
private static String getLollipopFGAppPackageName(Context ctx) {
try {
UsageStatsManager usageStatsManager = (UsageStatsManager) ctx.getSystemService("usagestats");
long milliSecs = 60 * 1000;
Date date = new Date();
List<UsageStats> queryUsageStats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, date.getTime() - milliSecs, date.getTime());
if (queryUsageStats.size() > 0) {
Log.i("LPU", "queryUsageStats size: " + queryUsageStats.size());
}
long recentTime = 0;
String recentPkg = "";
for (int i = 0; i < queryUsageStats.size(); i++) {
UsageStats stats = queryUsageStats.get(i);
if (i == 0 && !"org.pervacio.pvadiag".equals(stats.getPackageName())) {
Log.i("LPU", "PackageName: " + stats.getPackageName() + " " + stats.getLastTimeStamp());
}
if (stats.getLastTimeStamp() > recentTime) {
recentTime = stats.getLastTimeStamp();
recentPkg = stats.getPackageName();
}
}
return recentPkg;
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
//要啓用USAGE_STATS
// Declare USAGE_STATS permisssion in manifest
<uses-permission
android:name="android.permission.PACKAGE_USAGE_STATS"
tools:ignore="ProtectedPermissions" />
Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
startActivity(intent);
可以這樣實現.....
ActivityManager am =(ActivityManager)context.getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1);
ActivityManager.RunningTaskInfo task = tasks.get(0); // current task
ComponentName rootActivity = task.baseActivity;
rootActivity.getPackageName();//*currently active applications package name*
對於棒棒糖:
ActivityManager mActivityManager =(ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE);
if(Build.VERSION.SDK_INT > 20){
String activityName =mActivityManager.getRunningAppProcesses().get(0).processName;
}
else{
String activityName = mActivityManager.getRunningTasks(1).get(0).topActivity.getPackageName();
}
你確定嗎?正如我可以看到根據最新的Android文檔,LOLLIPOP更新不允許你知道任何有關其他應用程序的信息,而不是你自己的!?
http://developer.android.com/reference/android/app/ActivityManager.html 您可以看到所有這些方法都已棄用!
試試這個..這對我有效。
ActivityManager activityManager = (ActivityManager) getSystemService (Context.ACTIVITY_SERVICE);
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP)
{
String packageName = activityManager.getRunningAppProcesses().get(0).processName;
}
else if(Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP)
{
String packageName = ProcessManager.getRunningForegroundApps(getApplicationContext()).get(0).getPackageName();
}
else
{
String packageName = activityManager.getRunningTasks(1).get(0).topActivity.getPackageName();
}
在API 21或更高版本中運行應用程序的最佳解決方案是在下面試試。 這個工作對我來說
private String retriveNewApp() {
if (VERSION.SDK_INT >= 21) {
String currentApp = null;
UsageStatsManager usm = (UsageStatsManager) this.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<>();
for (UsageStats usageStats : applist) {
mySortedMap.put(usageStats.getLastTimeUsed(), usageStats);
}
if (mySortedMap != null && !mySortedMap.isEmpty()) {
currentApp = mySortedMap.get(mySortedMap.lastKey()).getPackageName();
}
}
Log.e(TAG, "Current App in foreground is: " + currentApp);
return currentApp;
}
else {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
String mm=(manager.getRunningTasks(1).get(0)).topActivity.getPackageName();
Log.e(TAG, "Current App in foreground is: " + mm);
return mm;
}
}
關於SDK_INT> = 21的情況,哪些應用程序的進程仍然存在? – 2016-09-21 06:39:58
不工作返回null – 2017-07-02 10:26:03
我用得到頂級活動名稱的哈克的方式。 每當我創建或恢復某個活動時,我都將其名稱保存在Sharedpreferences中。我創建了兩個函數來保存並從SharedPreferences獲取頂級類。這總是覆蓋最後的活動並提供最高的活動。 我不必擔心權限和API級別。 非常簡單,但絕對不是最好的方式。
對不起,但該問題詢問與您的應用程序名稱不同的包名 – Penn 2016-12-01 19:50:57
您可以使用AccessibilityService獲取當前正在運行的應用程序。 輔助功能服務提供了onAccessibilityEvent事件。
以下是一些示例代碼。
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
if (event.getPackageName() != null && event.getClassName() != null) {
Log.d("Foreground App", event.getPackageName().toString());
}
}
}
你可以找到關於無障礙服務的詳細信息here
- 1. 如何在Android的棒棒糖版本後獲取包名稱
- 2. 從Uri獲取路徑名稱Android棒棒糖
- 3. ActivityManager topActivity不棒棒糖
- 4. 如何打開棒棒糖中的位置或獲取當前位置
- 5. 如何在C#中獲取當前應用程序的名稱
- 6. 獲取在前臺運行的應用程序的名稱:android
- 7. Android獲取當前打開的應用程序的包名稱
- 8. 獲取正在運行的應用程序的簡單名稱
- 9. 無法獲取正在運行的應用程序的名稱
- 10. 如何獲取當前在辦公室的應用程序當前運行的應用程序的名稱2013
- 11. Win32 C++如何獲取當前應用程序服務名稱
- 12. 如何從進程名稱獲取應用程序名稱?
- 13. 如何獲取ssis包中當前正在運行的任務的名稱
- 14. 獲取當前MembershipProvider名稱
- 15. 如何從Android的包名獲取應用程序名稱?
- 16. 如何使用ADB獲取棒棒糖上的IMEI?
- 17. 無法獲取前棒棒糖設備上的iBeacon的UUID
- 18. 從軟件包名稱中獲取應用程序名稱
- 19. 獲取當前前臺應用程序的名稱
- 20. 我如何獲取應用程序名稱或包名我退出的應用程序名稱
- 21. 如何獲取後臺運行應用程序的名稱
- 22. 獲取當前課程的名稱?
- 23. 如何獲取Android下面的棒棒糖的第二個simoperatorname
- 24. 從C#獲取正在運行的Java程序的名稱(如.NET應用程序的進程名稱)
- 25. 在Xamarin Forms應用程序中獲取當前頁面名稱
- 26. 如何獲取當前路由名稱?
- 27. 如何在Perl中獲取當前子程序的名稱?
- 28. 獲取當前活動的應用程序名稱
- 29. 獲取當前ClickOnce的應用程序發佈者名稱?
- 30. win32gui獲取當前活動的應用程序名稱
您可以使用UsageStatsManager要查詢的事件(不使用狀態),但按照文件,最後分(實際秒)被切斷,防止非系統應用程序知道當前正在運行的應用程序。 – 2015-01-21 12:00:11