Android PackageManager Нет идентификатора пакета при получении значения для номера ресурса 0x00000000 - PullRequest
0 голосов
/ 27 ноября 2018

При использовании PackageManager для получения списка приложений с устройства, если я звоню pm.getApplicationIcon(app);, а у приложения нет значка, система вернет системупо умолчанию , как и положено , но в консоли я получаю сообщение об ошибке:

W/ResourceType: No package identifier when getting value for resource number 0x00000000
W/PackageManager: Failure retrieving resources for com.google.android.gsf.login: Resource ID #0x0

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

Мой код

PackageManager pm = getActivity().getApplicationContext().getPackageManager();

for (ApplicationInfo app : pm.getInstalledApplications(0)) {
    long dataUsed = ((TrafficStats.getUidRxBytes(app.uid) + TrafficStats.getUidTxBytes(app.uid)) / 1000) / 1000;

    if ((int)dataUsed > 0) {
        String name = pm.getApplicationLabel(app).toString();
        Drawable icon = pm.getApplicationIcon(app);

        // Custom object
        DataUsageItem item = new DataUsageItem(name, icon, false, dataUsed, new int[]{ 0 , 0 , 0 , 0 , 0 , 0 , 0 });
        items.add(item);
    }
}

1 Ответ

0 голосов
/ 03 декабря 2018

ApplicationInfo для каждого будет иметь поле icon, которое содержит идентификатор ресурса для этого элемента в указанном пакете.Убедитесь, что он ненулевой, прежде чем вызывать getApplicationIcon().

. Для пакетов, у которых нет значка, т. Е. Тех, чье поле icon равно нулю, вы можете получить системный значок по умолчанию с идентификатором android.R.drawable.sym_def_app_icon..

...