getApplicationIcon() через PackageManager возвращает изображение белого столбца, помещенное в центре, которое не является значком приложения

После того, как я призываю getApplicationIcon() лайк:

context.getPackageManager().getApplicationIcon("com.cmcm.gamemaster");

это вернуть это:

белая полоса изображения

белая полоса изображения, расположенная посередине. и всегда происходит для определенного приложения, остальные в списке установленных приложений никогда не возвращают неправильный значок.

перед тем, как вызвать этот метод, я вызываю getPackageInfo() около 30 раз, чтобы создать список установленных приложений. поэтому я прокомментировал эти коды, тогда проблема исчезла.

Я обращаю внимание на исходный код фреймворка (android 6.0.1), но не нашел никакой полезной информации.

кто-то сталкивался с этой проблемой раньше, или скажите мне неверное имя файла в исходном коде фреймворка, чтобы я мог проверить, что происходит.

заранее спасибо.

3 ответа

На основании вашего описания я предполагаю, что вы хотите получить список установленных приложений. Попробуйте это, чтобы получить все приложения:

import android.content.pm.ApplicationInfo;
...
List<ApplicationInfo> apps = context.getPackageManager().getInstalledApplications(0);
...

И если вы хотите для конкретного, как в вашем коде, попробуйте это:

import android.content.pm.ApplicationInfo;
...
ApplicationInfo app = context.getPackageManager().getApplicationInfo("com.cmcm.gamemaster", 0);
Icon icon = app.loadIcon(getPackageManager());
...

Вы можете получить значок или название от apps/app так как он содержит всю информацию, связанную с приложением. Не забудьте использовать точное утверждение импорта.

Если вышеуказанные методы не работают, обратитесь к этому посту. Я уверен, что это будет полезно.

Сначала получите экземпляр PackageManager,

затем передайте packageName в getApplicationIcon(String), который вернет растровое изображение!

PackageManager packageManager = mContext.getPackageManager();
Bitmap mBitmap = packageManager.getApplicationIcon(app.package.name);
holder.appIcon.setImageDrawable(mBitmap);

getPackageManager().getApplicationIcon("APP_PACKAGE_NAME") возвращает Drawable. После отрисовки вы можете отобразить значок в imageView, используя imageView.setImageDrawable(drawable).

СОВЕТЫ: ​​- Получение всех установленных значков приложений может привести к зависанию вашего пользовательского интерфейса, поэтому вы должны сделать это в отдельном потоке.

new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    final Drawable drawable = mContext.getPackageManager().getApplicationIcon(applicationInfo.packageName);
                    ((Activity) mContext).runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            holder.imageView.setImageDrawable(drawable);
                        }
                    });

                } catch (PackageManager.NameNotFoundException e) {
                    e.printStackTrace();
                }
            }
        }).start();

Надеюсь, поможет.

Другие вопросы по тегам