создание ярлыка Android-приложения на главном экране - PullRequest
0 голосов
/ 09 сентября 2018

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

код, который я использовал: в манифесте:

<activity android:name=".MainScreenActivity" android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

в методе onCreate я вызвал функцию, которая выполняет следующие действия:

    private boolean createShortcut()
{
    //create shortcut intent
    Intent shortcutIntent = new Intent(getApplicationContext(),MainScreenActivity.class);
    shortcutIntent.setAction(Intent.ACTION_MAIN);

    //create intent to add and define the shortcut
    Intent addingIntent = new Intent();
    addingIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT,shortcutIntent);
    addingIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME,"SenseGuard");
    addingIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,Intent.ShortcutIconResource.fromContext(getApplicationContext(),R.drawable.peak_detection_icon));
    addingIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");

    getApplicationContext().sendBroadcast(addingIntent);
}

Я попытался переключить getApplicationContext () на this. Я пытался с реальным планшетом и на эмуляторе, но я не могу заставить его работать.

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

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

Однако есть две проблемы с этим.

  1. Ваша программа запуска по умолчанию не гарантирует прослушивание этой трансляции. Например, в Nova Launcher это поведение отключено по умолчанию. Другие пусковые установки могут вообще не слушать это действие.

  2. В Android Oreo (26) и выше это не сработает так, как вы ожидаете (для получения более подробной информации прочтите комментарии по методу, который я привел).

Вы можете по-прежнему использовать эту логику и надеяться, что она работает для некоторых из ваших пользователей, но имейте в виду, что многие программы запуска по умолчанию больше не имеют даже ящиков приложений, поэтому добавление ярлыка может дать вашим пользователям двойные значки. Кроме того, я знаю, что, по крайней мере, для меня, мой домашний экран организован так, как я хочу, и если я установлю приложение, было бы очень неприятно, если бы оно добавило себя на мой домашний экран.

Если вы используете , используя средство запуска AOSP по умолчанию (или закрывающую ветвь), однако, и оно не работает, убедитесь, что вы добавили это в свой манифест:

<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
0 голосов
/ 09 сентября 2018

Сделайте вот так:

Шаг 1:

Обновите ваш manifest.xml:

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

Шаг 2:

в вашем файле MainActivity.java создайте метод addShortcut () и в его блок поместите этот код:

private void addShourcut(){
  Intent shortCutIntent = new Intent(getApplicationContext() ,MainActivity.class);

  shortCutIntent.setAction(Intent.ACTION_MAIN);

  Intent addIntent = new Intent();

  addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT , shortCutIntent);
  addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME , "Convertor");
  addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE ,
    Intent.ShortcutIconResource.fromContext(getApplicationContext() , R.mipmap.ic_launcher));
  addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
  addIntent.putExtra("duplicate" , false);
  getApplicationContext().sendBroadcast(addIntent);

}

Step3:

установите onClickListener для вашего представления, которое будет создавать ярлык:

img_pin = (ImageView) findViewById(R.id.img_pin);
img_pin.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {

    addShourcut();
    Toast.makeText(MainActivity.this, "shortcut created !", Toast.LENGTH_SHORT).show();

  }
});

Это работает для меня ... happy codinngggg ...:)

...