有人可以帮我提供有关检索当前在Android中运行的活动的软件包名称的示例代码吗?
编辑:
代码1
ActivityManager am = (ActivityManager) getSystemService(Activity.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> processes = am.getRunningAppProcesses();
if (processes != null){
for (int i=0; i<processes.size(); i++){
RunningAppProcessInfo temp = processes.get(i);
String pName = temp.processName;
for (int k=0; k<blacklist.size(); k++){
if (pName.equalsIgnoreCase((String)blacklist.get(k))){
int pid = android.os.Process.getUidForName(pName);
android.os.Process.killProcess(pid);
}
}
}
代码2?
int pid = temp.pid;
String[] packages = temp.pkgList;
for (int j=0; j<packages.length; j++){
String packageName = packages[j];
for (int k=0; k<blacklist.size(); k++){
if (packageName.equalsIgnoreCase((String)blacklist.get(k))){
//Android 2.2+ kill all background processes
am.killBackgroundProcesses(packageName);
}
}
}
假设黑色具有程序的应用程序包名称,我已将其列入黑名单并希望终止。以上哪个代码是实现我的任务杀手的正确方法。有人可以解释killBackgroundProcesses(packageName)和android.os.Process.killProcess(pid)之间的区别,因为我似乎无法区分它们。
答案 0 :(得分:1)
您可以使用Android ActivityManager 上的 getRunningAppProcesses 来检索正在运行的进程列表。
点击此链接:http://developer.android.com/reference/android/app/ActivityManager.html#getRunningAppProcesses%28%29
您可以使用Android PackageManager 上的 getInstalledPackages 方法检索所有已安装应用的列表
答案 1 :(得分:0)
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*
在循环中使用此功能,您将获得所有当前正在运行的应用的包名称,以获取正在运行的应用名称,请参阅此EXAMPLE
答案 2 :(得分:0)
首先是大于20的API,然后使用波纹管代码确实有效。我使用此代码并正常工作。试试吧
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<Long,UsageStats>();
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;