Я успешно получил значки приложений из установленных приложений со следующим фрагментом:
List<ApplicationInfo> list = pm.getInstalledApplications(PackageManager.GET_ACTIVITIES);
for (int i=0; i< list.size(); i++)
{
randInt1 = new Random().nextInt(list.size());
ApplicationInfo appInfo = list.get(randInt1);
packageName = appInfo.packageName;
appLabel = (String) pm.getApplicationLabel(appInfo);
icon = pm.getApplicationIcon(appInfo);
System.out.println("Icon ==> " +icon);
}
Как вернуть значки выполняемых в настоящее время задач, а не только установленных приложений?
Хорошо, это то, что я закончил делать, и, похоже, он работает, но есть ли способ получить только те задачи, которые были запущены пользователем, как убийца задачи, и не спящие системные процессы? Могут ли они быть отфильтрованы по категориям? Цель состоит в том, чтобы вернуть случайный значок приложения для одной из запущенных в данный момент задач, которые были недавно запущены пользователем, если это помогает.
int ii=0;
List< ActivityManager.RunningTaskInfo> Runningtasks= mgr.getRunningTasks(30);
for(ii=0;ii<Runningtasks.size();ii++)
{
randInt1 = new Random().nextInt(Runningtasks.size());
ComponentName comName=Runningtasks.get(randInt1).topActivity;
packageName = comName.getPackageName();
//String Classname = comName.getClassName();
System.out.println("icon====> "+icon);
System.out.println("packageName====> "+packageName);
// Toast toast1 = Toast.makeText(pm, packageName, LONG);
// toast1.show();
}
try{
icon = pm.getApplicationIcon(packageName);
}catch(Exception e){}
Вы можете использовать ActivityManager.getRunningTasks()
чтобы получить список запущенных задач. В этом списке будет RunningTaskInfo, который содержит имя baseActivity, которое является ComponentName.
Из этого вы можете сделать что-то вроде:
PackageManager pm = context.getPackageManager();
ApplicationInfo appInfo = pm.getApplicationInfo(componentName.getPackageName(), 0);
... // rest of the code as you previously did..
List<ActivityManager.RunningTaskInfo> list = activityManager.getRunningTasks(30);
randInt1 = new Random().nextInt(list.size());
ApplicationInfo appInfo = list.get(randInt1);
packageName = appInfo.packageName;
appLabel = (String) pm.getApplicationLabel(appInfo);
icon = pm.getApplicationIcon(appInfo);
System.out.println("Icon ==> " +icon);
ActivityManager.RunningTaskInfo
Обзор класса
Информация, которую вы можете получить о конкретной задаче, которая в настоящее время "работает" в системе. Обратите внимание, что выполняемая задача не означает, что данная задача фактически имеет процесс, в котором он активно работает; это просто означает, что пользователь пошел к нему и никогда не закрывал его, но в настоящее время система, возможно, убила свой процесс и только удерживает его до последнего состояния, чтобы перезапустить его, когда пользователь вернется.
http://developer.android.com/reference/android/app/ActivityManager.RunningTaskInfo.html
После этого будет легко получить значок!
Drawable icon = getPackageManager().getApplicationIcon("com.example.testnotification");
imageView.setImageDrawable(icon);