2011-01-31 17 views
15

Como sabe, cuando la aplicación está instalada oficialmente, el icono se crea en la pantalla del menú del iniciador. Lo que quiero hacer es crear un icono en la pantalla de inicio del usuario durante la instalación. (sin icono presionando durante 5 segundos.)¿Cómo puedo colocar el icono de la aplicación en la pantalla de inicio del iniciador?

oí esto desde otra fuente simplemente agregar

<category android:value="android.intent.category.HOME" /> 

a AndroidManifest.xml archivo, pero no funcionó.

¿Hay alguna otra manera de hacerlo?

+10

¿No cree que esto podría ser una mala práctica? Si el usuario quiere el ícono en su pantalla, pueden hacerlo ellos mismos muy fácilmente. – Jems

+2

Esto es similar a las aplicaciones de Windows que inducen a la ira y que insisten en agregarse al escritorio en cada instalación/actualización/inicio. Incluso si encuentras una forma, * por favor no lo hagas *. – ZoogieZork

+5

@Jems, ZoogieZork ambos son correctos, pero algunas situaciones requerirán esta funcionalidad, por ejemplo, una tienda de aplicaciones empresariales que solo está disponible para empleados en dispositivos propiedad de la compañía. Muchos de estos usuarios no tendrán el conocimiento para poner aplicaciones en la pantalla de inicio, pero tendrán una experiencia de usuario mucho mejor si lo hacemos por ellos. – Kennifer

Respuesta

15

Puede utilizar esta:

Intent shortcutIntent = new Intent(); 
shortcutIntent.setClassName("packageName", "className"); 
//shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
//shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

Intent addIntent = new Intent(); 
addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); 
addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "shortcut_name"); 
addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, 
Intent.ShortcutIconResource.fromContext(context, R.drawable.icon)); 
//intent.putExtra("duplicate", false); 
addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); 
      context.sendBroadcast(addIntent); 

usted tiene que utilizar siguiente permiso en su AndroidManaifest.xml

<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" /> 

Usted puede utilizar el código comentado de acuerdo a sus necesidades.

Tenga en cuenta que, tal vez, por encima de API no está documentado. Pero funciona.

+3

Para desinstalar el acceso directo, vea mi respuesta http://stackoverflow.com/questions/3480287/trying-to-uninstall-shortcut-but-shortcut-wont-go-away/ – Vasu

+0

En realidad, como novato en Java, pude solo da sentido a este código del ejemplo de desinstalación de Kaillash. Ese ejemplo muestra que puedes ponerlo dentro de la actividad principal. Parece que poner este código en el controlador de eventos onCreate() hace que el atajo se cree/recree cada vez que se inicia la aplicación. ¿Alguna solución para eso? – Wytze

+1

Funciona. Pero creo que la opción es: intent.putExtra ("duplicate", false); debe activarse de forma predeterminada para evitar el icono de duplicación en la pantalla de inicio – anticafe

-1

Puede hacer una función setup que el usuario puede usar para realizar todas las acciones posibles. Por ejemplo, haga las carpetas necesarias accesibles para el usuario (si aún no existen), agregue el acceso directo a la pantalla de inicio y/o cargue los datos iniciales.

Esta es una función que estoy escribiendo ahora, así que espero que salga bien. ¡Pero sí el punto es mantenerlo fuera del onCreate() para que no se llame cada vez!

+0

@Wytze: esta es una respuesta-respuesta a su último comentario sobre la respuesta de Kailash. –

7

Utilizo estos métodos para agregar o quitar accesos directos correctamente. Estos métodos funcionan bastante bien y son los mismos que el sistema Android cuando el usuario agrega/elimina manualmente un atajo.

public static void addShortcut(Context context) 
{ 
    Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); 

    ApplicationInfo appInfo = context.getApplicationInfo(); 

    // Shortcut name 
    shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, appInfo.name); 
    shortcut.putExtra("duplicate", false); // Just create once 

    // Setup activity shoud be shortcut object 
    ComponentName component = new ComponentName(appInfo.packageName, appInfo.className); 
    shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(Intent.ACTION_MAIN).setComponent(component)); 

    // Set shortcut icon 
    ShortcutIconResource iconResource = Intent.ShortcutIconResource.fromContext(context, appInfo.icon); 
    shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource); 

    context.sendBroadcast(shortcut); 
} 

public static void deleteShortcut(Context context) 
{ 
    Intent shortcut = new Intent("com.android.launcher.action.UNINSTALL_SHORTCUT"); 

    ApplicationInfo appInfo = context.getApplicationInfo(); 

    // Shortcut name 
    shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, appInfo.name); 

    ComponentName comp = new ComponentName(appInfo.packageName, appInfo.className); 
    shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(Intent.ACTION_MAIN).setComponent(comp)); 

    context.sendBroadcast(shortcut); 
} 

Permisos:

<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" /> 
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" /> 

BroadcastReceiver:

<receiver android:name="YOUR.PACKAGE.PackageReplacedReceiver"> 
    <intent-filter> 
     <action android:name="android.intent.action.PACKAGE_REPLACED" /> 
     <data android:scheme="package" android:path="YOUR.PACKAGE" /> 
    </intent-filter> 
</receiver> 
+0

¿Funciona también para los widgets? – Sanjeev

8

Esto ahora se resuelve por el servicios de Google Play. No tiene que agregar ningún código para hacerlo nunca más. Ahora, cuando instala una aplicación desde Google Play Store, crea automáticamente el logotipo en la pantalla principal. Se puede manejar en la configuración de la tienda de Google Play. Excepción: si está utilizando roms o iniciadores personalizados, no funciona con algunos.

+0

En realidad, esta ha sido una funcionalidad básica desde el principio en Android: no tiene nada que ver con la Play Store o sus servicios. –

+0

¿Qué pasa si no lo quieres? Tengo una aplicación que solo debe iniciarse desde un Intento de otra aplicación. Pero tengo una actividad de iniciador para la configuración. No quiero que el icono de configuración se agregue a la pantalla de inicio de manera predeterminada. – Roel

1

que tenían problemas con las respuestas anteriores y que se debe a la API 22 y tal vez otras APIs rendimientos de getApplicationInfo() className en modo de depuración/emulación:.
"com.android.tools.fd.runtime.BootstrapApplication"

Lo más importante es que necesitaba establecer la ruta completa a la clase para el nombre de la clase. (vea los cambios)

Por ejemplo, tuve lo siguiente:
packageName = com.example.user.miaplicacion
className = MainActivity

En Kailash answer necesitaba cambiar esta línea:

shortcutIntent.setClassName("packageName", "className"); 

a

shortcutIntent.setClassName("com.example.user.myapp", "com.example.user.myapp.MainActivity"); 



En ChristopheCVBs answer necesitaba cambiar esta línea:

ComponentName comp = new ComponentName(appInfo.packageName, appInfo.className); 

a

ComponentName comp = new ComponentName(appInfo.packageName, appInfo.packageName+".MainActivity"); 
Cuestiones relacionadas