Я действительно не понимаю, что происходит, и, возможно, вы можете дать мне идею. Я использую getInstalledPackages() для получения списка всех установленных пользователем приложений и их разрешений. Вот как я это делаю:
private PackageManager pm;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
pm = getPackageManager();
getListData();
}
private void getListData()
{
backTask = new BackTask();
backTask.execute();
}
protected class BackTask extends AsyncTask<Context, String, ArrayList<App>>
{
....
@Override
protected ArrayList<App> doInBackground(Context... param)
{
try {
//get a list of installed apps.
List<PackageInfo> packages = pm.getInstalledPackages(PackageManager.GET_PERMISSIONS | PackageManager.GET_PROVIDERS);
for (PackageInfo packageInfo : packages) {
ApplicationInfo application = packageInfo.applicationInfo;
....
}
Мне нужно обновить список, отображаемый на основе взаимодействия с пользователем. Проблема появляется в этой строке в AsyncTask:
List<PackageInfo> packages = pm.getInstalledPackages(PackageManager.GET_PERMISSIONS | PackageManager.GET_PROVIDERS);
Иногда пакеты содержат все установленные приложения, иногда ПУСТОЙ. Скажем, например, из 3 раз, 3-й раз пустой. Вынос этого кода из AsyncTask и добавление его в getListData() работает каждый раз без каких-либо проблем. Проблема в том, что я немного зависаю, потому что операция не в обратном потоке. Так в чем же дело с AsyncTask? Я делаю что-то неправильно ?