Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cargar actividad y / o el logotipo de la aplicación mediante programación de Manifest

Estoy intentando cargar el logotipo asociado con la actividad actual y / o su aplicación principal desde la definición en el manifiesto. Esta técnica ya ha funcionado correctamente al cargar el título y el icono asociados a ambos, pero el logotipo siempre devuelve null o 0.

Aquí está la información relevante del manifiesto con el que estoy trabajando:

 <application android:icon="@drawable/ic_launcher" android:logo="@drawable/ad_logo" android:label="@string/app_name" android:hardwareAccelerated="true"> <activity android:name=".MainActivity" android:label="@string/app_name" android:logo="@drawable/ad_logo"> 

Con activity siendo una instancia de la actividad definida anteriormente, he intentado lo siguiente (resultados anotados en línea):

 PackageManager pm = activity.getPackageManager(); ComponentName cn = activity.getComponentName(); ApplicationInfo ai = activity.getApplicationInfo(); //ACTIVITY LABEL: Works pm.getActivityInfo(cn, PackageManager.GET_ACTIVITIES).loadLabel(pm); //APPLICATION LABEL: Works ai.loadLabel(pm); //APPLICATION LABEL: Works pm.getApplicationLabel(ai); //ACTIVITY ICON: Works pm.getActivityInfo(cn, PackageManager.GET_ACTIVITIES).loadIcon(pm); //ACTIVITTY ICON: Works pm.getActivityIcon(cn); //APPLICATION ICON: Works pm.getApplicationIcon(ai); //APPLICATION ICON: Works ai.loadIcon(pm); //ACTIVITY LOGO: Does not work pm.getActivityInfo(cn, PackageManager.GET_ACTIVITIES).loadLogo(pm); //ACTIVITY LOGO: Does not work pm.getActivityInfo(cn, PackageManager.GET_ACTIVITIES).logo //ACTIVITY LOGO: Does not work pm.getActivityLogo(cn); //APPLICATION LOGO: Does not work pm.getApplicationLogo(ai); //APPLICATION LOGO: Does not work pm.getApplicationLogo(activity.getApplication().getPackageName()); //APPLICATION LOGO: Does not work ai.loadLogo(pm); //APPLICATION LOGO: Does not work pm.getApplicationInfo(ai.packageName, 0).loadLogo(pm); //APPLICATION LOGO: Does not work ai.logo; 

¿Alguien sabe cómo cargar correctamente el logotipo para uno o ambos de estos objetivos?

Editar : El soporte de logotipo requiere el nivel de API 9. Los dispositivos en los que estoy probando son emuladores y dispositivos físicos todos con nivel API 10. Este código nunca se ejecutará en 3.0+.

  • ¿Puedo establecer atributos de nivel de API X en mi manifiesto cuando mi minSdkVersion es menor que X?
  • Filtrado de Android NDK y Google Play
  • ¿Cómo cambiar AndroidManifest en tiempo de ejecución?
  • Reanude la actividad principal en lugar de iniciar la actividad del lanzador
  • El permiso personalizado de Android falla según el pedido de instalación de la aplicación
  • Google Analytics recoge un número de versión incorrecto para mi aplicación para Android
  • Cómo forzar un valor de metadatos para escribir cadena?
  • Cómo evitar el lanzamiento de la aplicación de Android dos veces, ejecutándose desde Eclipse a dispositivo real
  • 4 Solutions collect form web for “Cargar actividad y / o el logotipo de la aplicación mediante programación de Manifest”

    De mis pruebas, su código funciona correctamente en un dispositivo Honeycomb, pero no en un Gingerbread o dispositivo por debajo. Esto parece implicar que la funcionalidad del android:logo aunque esté presente en el Nivel 8 de API, no se implementa correctamente en la plataforma subyacente. Es decir, la misma aplicación apk en un dispositivo de nivel 8-10 no está conservando el atributo de logotipo, pero sí un dispositivo de nivel 11. Eso significa que el problema no es con el código o el AndroidManifest.xml, sino con la plataforma.

    Si echa un vistazo al código en android.app.ContextImpl.ApplicationPackageManager ( aquí ), encontrará que finalmente utiliza el método

     public Drawable getDrawable(String packageName,int resid,ApplicationInfo appInfo) 

    (Líneas 2131 a 2173 en 2.3).

    Hay varias llamadas Log.w allí que puede utilizar para seguir lo que está pasando a través de adb (es decir, la Failure retrieving resources for …)

    Primero necesitas encontrar todas las aplicaciones que están instaladas. Para ello usamos los siguientes métodos del gestor de paquetes,

     public abstract List<PackageInfo> getInstalledPackages (int flags) 

    Más información aquí

    También puede utilizar el siguiente método para obtener información sobre los paquetes instalados.

     public abstract List<ApplicationInfo> getInstalledApplications (int flags) 

    Más información aquí

    Ahora, después de obtener la lista, iterarla utilizando el siguiente método.

     public Drawable getDrawable(String packageName,int resid,ApplicationInfo appInfo) 

    Más información aquí

    Cada iteración le dará el respectivo dibujable del paquete consultado. Aquí res id es el id del icono ..

     R.drawable.icon 

    @ Jake Wharton, que está tratando de recuperar algo que no existe. A diferencia de las aplicaciones , las actividades no tienen un atributo de logotipo separado (el logotipo definido en la aplicación se convierte en el atributo predeterminado para todas las actividades). Es por eso que no puede recuperar uno de una actividad.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.