我制作了一个自定义启动器并使用此方法检索设备中的应用程序列表:
public class myThread extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... Params) {
PackageManager pm = getPackageManager();
Intent i = new Intent(Intent.ACTION_MAIN, null);
i.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> allApps = pm.queryIntentActivities(i, 0);
for(ResolveInfo ri:allApps) {
AppInfo app = new AppInfo();
app.label = ri.loadLabel(pm);
app.packageName = ri.activityInfo.packageName;
app.activityName = ri.activityInfo.name;
app.icon = ri.activityInfo.loadIcon(pm);
adapter.addApp(app);
}
return "Success";
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
Collections.sort(adapter.getAppsList(),new ActivityNameComparator());
updateStuff();
}
任务在主要活动onCreate()
中执行。当手机开启时打开此启动器不会产生任何问题。我在内部存储和SD卡中都获得了所有应用程序。
当我重启设备时出现问题。列表中丢失了一些应用程序。然后我意识到那些应用程序是保存在我的SD卡中的应用程序。
有没有办法在重新启动后在SD卡中获取应用程序?或者是否有更好的方法来获取自定义启动器的应用程序列表?