Android crea accesos directos en la pantalla de inicio

Lo que quiero hacer es:

1) Estoy dentro de una actividad, hay 2 botones. Si hago clic en el primero, se crea un acceso directo en mi pantalla de inicio. El acceso directo abre una página html que se ha descargado previamente, así que quiero que utilice el navegador predeterminado, pero no quiero usar Internet porque ya tengo la página.

2) El segundo botón crea otro atajo que inicia una actividad. Y quiero pasar a la actividad algunos argumentos extras (como cadenas por ejemplo) ………..

¿Son esas cosas posibles? He encontrado algún enlace y algunas preguntas similares como Android: ¿Existe una forma de programación para crear un acceso directo en la pantalla de inicio

Ellos parecen ser la respuesta a mi pregunta, pero alguien me dijo que este código no va a funcionar en todos los dispositivos y que está en desuso y que lo que quiero hacer no es posible …….

Esta técnica no se recomienda. Se trata de una implementación interna, que no forma parte del SDK de Android. No funcionará en todas las implementaciones de la pantalla de inicio. Es posible que no funcione en todas las versiones anteriores de Android. Es posible que no funcione en futuras versiones de Android, ya que Google no está obligado a mantener interfaces internas no documentadas. Por favor, no use esto

¿Qué significa implementación interna? Es que código confiable o no ….. me ayudan pls …..

El código de ejemplo utiliza interfaces no documentadas (permiso e intención) para instalar un acceso directo. Como "alguien" le dijo, esto puede no funcionar en todos los teléfonos, y puede romper en futuras versiones de Android. No lo hagas.

La forma correcta es escuchar una solicitud de acceso directo desde la pantalla de inicio, con un filtro de intenciones como el de su manifiesto:

 <activity android:name=".ShortCutActivity" android:label="@string/shortcut_label"> <intent-filter> <action android:name="android.intent.action.CREATE_SHORTCUT" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> 

Luego, en la actividad que recibe la intención, se crea una intención para el acceso directo y se devuelve como resultado de la actividad.

 // create shortcut if requested ShortcutIconResource icon = Intent.ShortcutIconResource.fromContext(this, R.drawable.icon); Intent intent = new Intent(); Intent launchIntent = new Intent(this,ActivityToLaunch.class); intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, launchIntent); intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, someNickname()); intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon); setResult(RESULT_OK, intent); 

He desarrollado un método a continuación para crear el icono de acceso directo en Android Homescreen [Probado en mi propia aplicación]. Sólo llámalo.

 private void ShortcutIcon(){ Intent shortcutIntent = new Intent(getApplicationContext(), MainActivity.class); 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, "Test"); addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(getApplicationContext(), R.drawable.ic_launcher)); addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); getApplicationContext().sendBroadcast(addIntent); } 

No olvide cambiar su nombre de actividad, icono recurso & permiso.

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

Codificación feliz!

Editar:

Para el problema duplicado, la primera opción es añadir debajo de la línea en el código de lo contrario crea uno nuevo cada vez.

 addIntent.putExtra("duplicate", false); 

Segunda opción es desinstalar primero el icono de acceso directo de la aplicación y, a continuación, volver a instalarlo si la primera opción no funcionó.

He mejorado un poco la solución anterior. Ahora guarda en las preferencias si ya se ha agregado un acceso directo y no lo agrega en los nuevos lanzamientos de una aplicación si el usuario la ha eliminado. Esto también ahorra un poco de tiempo, ya que el código para agregar un acceso directo existente ya no se ejecuta.

 final static public String PREFS_NAME = "PREFS_NAME"; final static private String PREF_KEY_SHORTCUT_ADDED = "PREF_KEY_SHORTCUT_ADDED"; // Creates shortcut on Android widget screen private void createShortcutIcon(){ // Checking if ShortCut was already added SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); boolean shortCutWasAlreadyAdded = sharedPreferences.getBoolean(PREF_KEY_SHORTCUT_ADDED, false); if (shortCutWasAlreadyAdded) return; Intent shortcutIntent = new Intent(getApplicationContext(), IntroActivity.class); 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, "YourAppName"); addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(getApplicationContext(), R.drawable.ic_launcher)); addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); getApplicationContext().sendBroadcast(addIntent); // Remembering that ShortCut was already added SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putBoolean(PREF_KEY_SHORTCUT_ADDED, true); editor.commit(); } 

@Siddiq Abu Bakkar Respuesta funciona. Sin embargo, para evitar la creación de acceso directo cada vez que se inicia la aplicación utiliza las preferencias compartidas.

 final String PREF_FIRST_START = "AppFirstLaunch"; SharedPreferences settings = getSharedPreferences(PREF_FIRST_START, 0); if(settings.getBoolean("AppFirstLaunch", true)){ // record the fact that the app has been started at least once settings.edit().putBoolean("AppFirstLaunch", false).commit(); ShortcutIcon(); } 
 final Intent shortcutIntent = new Intent(this, SomeActivity.class); final Intent intent = new Intent(); intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); // Sets the custom shortcut's title intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name)); // Set the custom shortcut icon intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(this, R.drawable.icon)); // add the shortcut intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); sendBroadcast(intent); 

Desde el API level 26 , con com.android.launcher.action.INSTALL_SHORTCUT está obsoleto. La nueva forma de crear accesos directos está utilizando ShortcutManager .

Menciona que hay 3 tipos de atajos, estáticos, dinámicos y fijados. Según sus necesidades, puede elegir crearlas.

  • Android Convertir pantalla actual a mapa de bits
  • ¿Cómo detectar si Daydream está encendido?
  • Compartición de pantallas y visualizador tem en android to android
  • Después de la rotación de la pantalla, se cambiará el idioma de mi aplicación
  • Descripción de la densidad de la pantalla Samsung Galaxy Tab
  • ¿Cómo hacer que mi aplicación se vea igual en todos los dispositivos?
  • ¿Cómo puedo obtener el ancho y la altura de la pantalla del sistema Android Honeycomb?
  • Uso de iPad con 11 dedos ... Amplíe el límite de Android en Código
  • Desactivar la pantalla en android
  • ¿Hay un punto que tiene res / drawable-ldpi en android?
  • PhoneGap / Android - Bloqueo de la orientación al retrato
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.