getApplicationBanner возвращает ноль - PullRequest
0 голосов
/ 08 октября 2018

Я работаю над настроенным средством запуска Android для окна установки и пытаюсь получить баннер телевизионных приложений (показанных на изображении ниже), используя packageInfo.applicationInfo.loadBanner(context.getPackageManager()); ИЛИ context.getPackageManager().getApplicationBanner(packageName)

Android tv apps Это работает для большинства приложений, однако некоторые из них в результате возвращают ноль, например, в Google Play Games, хотя я могу получить значок (это логотип без текста рядом с ним).

Я использую правильный API?Есть ли способ получить его программно?

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

У меня тоже есть эта проблема.Причина, по которой разработчики приложений не прикрепляют баннер к пакету, заключается в том, что они прикрепляют баннер к действию.

Пример:

<?xml version="1.0" encoding="utf-8" standalone="no"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="ru.tv1.android.tv">
    ......
    <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:name="ru.kino1tv.android.tv.App" android:supportsRtl="true" android:theme="@style/AppTheme.Leanback">
        <activity android:banner="@drawable/app_icon_banner" android:icon="@drawable/app_icon_banner" android:label="@string/app_name" android:logo="@drawable/app_icon_banner" android:name="ru.kino1tv.android.tv.ui.activity.MainActivity" android:screenOrientation="landscape">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LEANBACK_LAUNCHER"/>
            </intent-filter>
            <meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/>
            <intent-filter>
                <action android:name="android.intent.action.SEARCH"/>
            </intent-filter>
        </activity>
       ......

    </application>
</manifest>

Каждый пакет может иметь несколько операций запуска.Итак, сначала нужно загрузить баннер для активности, а затем, если он null, попытаться загрузить баннер для пакета.

Intent AppsIntent = new Intent(Intent.ACTION_MAIN, null);
AppsIntent.addCategory(Intent.CATEGORY_LEANBACK_LAUNCHER);
List<ResolveInfo> apps = mPackageManager.queryIntentActivities(AppsIntent, 0);

for (ResolveInfo app : apps) {
    Drawable banner = app.activityInfo.loadBanner(mPackageManager);
    if (banner == null) {
        banner = app.activityInfo.applicationInfo.loadBanner(mPackageManager);
    }
}
0 голосов
/ 09 октября 2018

Из документации getApplicationBanner метод:

добавлено в API уровень 20

публичный реферат Drawable getApplicationBanner (String packageName)

Получить баннер, связанный с приложением.Получив информацию о пакете приложения, получает информацию о нем и вызывает getApplicationIcon() , чтобы вернуть его баннер .Если приложение не может быть найдено, выдается NameNotFoundException.

Ваша функция должна также вызвать getApplicationIcon, чтобы вернуть свой баннер после вызова метода getApplicationBanner.

...