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

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

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

это возвращает это:

white bar image

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

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

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

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

заранее благодарю.

Ответы [ 3 ]

0 голосов
/ 13 сентября 2018

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();

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

0 голосов
/ 13 сентября 2018

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

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

PackageManager packageManager = mContext.getPackageManager();
Bitmap mBitmap = packageManager.getApplicationIcon(app.package.name);
holder.appIcon.setImageDrawable(mBitmap);
0 голосов
/ 10 сентября 2018

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

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, поскольку он содержит всю информацию, связанную с приложением. Не забудьте использовать точный оператор импорта .

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

...