studio manager getpackagemanager android android-sdk-2.1

studio - getpackagemanager android



¿Cómo uso PackageManager.addPreferredActivity()? (4)

@afonseca: Estaba lidiando con el mismo problema. Gracias por el código, lo usé para empezar. También gracias Shimon. Fusioné su respuesta en la mía. Tengo el código funcionando (en las actualizaciones 1.6 y 2.1 1). Se ha ajustado un poco, pero el cambio principal 2 parece ser la sugerencia de Shimons y: ".Launcher" se cambió a "com.android.launcher.Launcher". El código de trabajo se publica a continuación.

Ciao, a2ronus

PackageManager pm = getPackageManager(); IntentFilter filter = new IntentFilter(); filter.addAction("android.intent.action.MAIN"); filter.addCategory("android.intent.category.HOME"); filter.addCategory("android.intent.category.DEFAULT"); Context context = getApplicationContext(); ComponentName component = new ComponentName(context.getPackageName(), TestReplaceHomeAppActivity.class.getName()); ComponentName[] components = new ComponentName[] {new ComponentName("com.android.launcher", "com.android.launcher.Launcher"), component}; pm.clearPackagePreferredActivities("com.android.launcher"); pm.addPreferredActivity(filter, IntentFilter.MATCH_CATEGORY_EMPTY, components, component);

En el SDK 1.5 estaba usando la clase PackageManager para configurar la pantalla de inicio preferida para que fuera mi aplicación usando PackageManager.addPackageToPreferred (). En el nuevo SDK (con 2.1), esto ha quedado en desuso, por lo que estoy tratando de usar addPreferredActivity () para obtener el mismo resultado, pero no funciona como se esperaba.

Algunos antecedentes necesarios. Estoy escribiendo una aplicación de reemplazo de la pantalla de bloqueo, así que quiero que la tecla de inicio inicie mi aplicación (que ya se estará ejecutando, por lo tanto, tengo el efecto de deshabilitar la tecla). Cuando el usuario "desbloquea" la pantalla, tengo la intención de restaurar la asignación para que todo funcione normalmente.

En mi AndroidManifest.xml tengo:

<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.HOME"/> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <uses-permission android:name="android.permission.SET_PREFERRED_APPLICATIONS"> </uses-permission>

En mi código tengo el siguiente fragmento de código:

// Set as home activity // This is done so we can appear to disable the Home key. PackageManager pm = getPackageManager(); //pm.addPackageToPreferred(getPackageName()); IntentFilter filter = new IntentFilter("android.intent.action.MAIN"); filter.addCategory("android.intent.category.HOME"); filter.addCategory("android.intent.category.DEFAULT"); ComponentName[] components = new ComponentName[] { new ComponentName("com.android.launcher", ".Launcher") }; Context context = getApplicationContext(); ComponentName component = new ComponentName(context.getPackageName(), MyApp.class.getName()); pm.clearPackagePreferredActivities("com.android.launcher"); pm.addPreferredActivity(filter, IntentFilter.MATCH_CATEGORY_EMPTY, components, component);

El comportamiento resultante es que el selector de aplicaciones aparece cuando presiono la tecla Inicio, lo que indica que la llamada a clearPackagePreferredActivities () funcionó, pero mi aplicación no se agregó como la preferida. Además, la primera línea en el registro a continuación dice algo sobre "eliminar la actividad preferida para Intención":

04-06 02: 34: 42.379: INFO / PackageManager (1017): El conjunto de resultados cambió, eliminando la actividad preferida para Intent {act = android.intent.action.MAIN cat = [android.intent.category.HOME] flg = 0x10200000} escriba nulo

04-06 02: 34: 42.379: INFO / ActivityManager (1017): Actividad de inicio: Intención {act = android.intent.action.MAIN cat = [android.intent.category.HOME] flg = 0x10200000 cmp = android / com. android.internal.app.ResolverActivity}

¿Alguien sabe lo que significa este primer mensaje de registro? Tal vez no estoy usando la API correctamente, ¿alguna idea? Cualquier ayuda sería muy apreciada.


Esta respuesta puede llegar un poco tarde, pero los documentos de la API dicen que para clearPackagePreferredActivities :

Una aplicación solo puede borrar sus propios paquetes.

Entonces, creo que en "restaurar el mapeo" lo único que puedes hacer es algo como:

getPackageManager().clearPackagePreferredActivities(getPackageName());

y así borrar la configuración predeterminada para la pantalla de inicio.


Esto parece funcionar para mí si inicializo la matriz de components para ALL HOME aplicaciones de ALL HOME en el dispositivo:

ComponentName[] components = new ComponentName[] { new ComponentName("com.intuitiveui.android", "com.intuitiveui.android.Friday"), new ComponentName("com.android.launcher2","com.android.launcher2.Launcher") };

Mi problema es cómo llenar esto dinámicamente.


addPreferredActivity ya no funciona en 2.2, clearPackagePreferredActivities todavía funciona pero solo puede borrar la preferencia por el paquete en el que se ejecuta esto.

hay una gran cantidad de hilos en los grupos de Android de Android sobre este problema y la posición oficial de Google (por ahora) para no proporcionarle métodos para ignorar las preferencias de los usuarios.