Как разместить значок приложения на главном экране пусковой установки?

Как вы знаете, когда приложение устанавливается с нумерацией, значок создается на экране меню запуска. Что я хочу сделать, так это создать значок на главном экране пользователя во время установки. (без нажатия значка в течение 5 секунд).

Я слышал это из другого источника, чтобы просто добавить

 

в файл AndroidManifest.xml, но это не сработало.

Есть ли другой способ сделать это?

Вы можете использовать это:

 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); 

Вы должны использовать следующее разрешение в своем AndroidManaifest.xml

  

Вы можете использовать прокомментированный код в соответствии с вашими требованиями.

Обратите внимание, что, возможно, выше API не документируется. Но это работает.

Это теперь разрешено службами Google Play. Вам больше не нужно добавлять какие-либо коды. Теперь, когда вы устанавливаете приложение из Google Play Store, он автоматически создает логотип на главном экране. Его можно обрабатывать в настройках магазина Google Play. Исключение: если вы используете какие-либо пользовательские ромы или пусковые установки, это не сработает с некоторыми.

Я использую эти методы для правильного добавления или удаления ярлыков. Эти методы работают очень хорошо и аналогичны системе Android, когда пользователь вручную добавляет / удаляет ярлык .

 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); } 

Разрешения:

   

BroadcastReceiver:

       

У меня были проблемы с вышеупомянутыми ответами, и это потому, что API 22 и, возможно, другие API возвращаются в getApplicationInfo (). ClassName в режиме отладки / эмуляции:
“Com.android.tools.fd.runtime.BootstrapApplication”

Самое главное, что мне нужно было установить весь путь к classу для имени classа. (см. изменения)

Например, у меня было следующее:
PackageName = com.example.user.myapp
= MainActivity имя classа

В ответе Кайлаша мне нужно было изменить эту строку:

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

в

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

В ответ ChristopheCVB мне нужно было изменить эту строку:

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

в

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

Надежное решение для всех устройств (устройство Pre / Post Oreo).

 createShortcutOnHome(CurrentActivity.this, ActivityToOpen.class, "app name", R.mipmap.ic_launcher); 

Этот метод может быть размещен в вашем Util.

  public static void createShortcutOnHome(@NonNull Activity activity, Class activityToOpen, String title, @DrawableRes int icon) { Intent shortcutIntent = new Intent(activity, activityToOpen); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { // code for adding shortcut on pre oreo device Intent intent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, title); intent.putExtra("duplicate", false); Parcelable parcelable = Intent.ShortcutIconResource.fromContext(activity, icon); intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, parcelable); activity.sendBroadcast(intent); System.out.println("added_to_homescreen"); } else { ShortcutManager shortcutManager = activity.getSystemService(ShortcutManager.class); assert shortcutManager != null; if (shortcutManager.isRequestPinShortcutSupported()) { ShortcutInfo pinShortcutInfo = new ShortcutInfo.Builder(activity, "browser-shortcut-") .setIntent(shortcutIntent) .setIcon(Icon.createWithResource(activity, icon)) .setShortLabel(title) .build(); shortcutManager.requestPinShortcut(pinShortcutInfo, null); System.out.println("added_to_homescreen"); } else { System.out.println("failed_to_add"); } } } 

Вы можете создать функцию setup которую пользователь может использовать для выполнения всех возможных действий. Например, создайте все необходимые пользовательские папки (если они еще не существуют), добавив ярлык на главный экран и / или загрузив исходные данные.

Это функция, которую я на самом деле пишу сейчас, поэтому, надеюсь, все получится. Но да, надо держать его вне onCreate() чтобы он не вызывался каждый раз!

  • Отключить прокруткуView Programmatically?
  • Зачем расширять class приложения?
  • Android Share Via Dialog
  • Android ==> Анализ памяти ==> Анализатор памяти Eclipse?
  • Android Geocoder getFromLocationName всегда возвращает null
  • Как увеличить размер кучи приложения для Android?
  • Как выполнить POST-сырое целое JSON в теле запроса на доработку?
  • Как перемещать текст по изображению
  • Есть ли простой способ нанести удар по тексту в виджетах приложения?
  • Android отключает тайм-аут экрана во время работы приложения
  • Ошибка 12501 аутентификация с помощью входа в google
  • Давайте будем гением компьютера.