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();
Надеюсь, поможет.