Как добавить ярлык на главный экран в android программно [дубликат]
этот вопрос уже есть ответ здесь:
эта проблема возникла, когда я разрабатывал приложение для android. Я подумал о том, чтобы поделиться знаниями, которые я собрал во время своего развития.
1 ответов
Android предоставить нам класс намерения com.android.launcher.action.INSTALL_SHORTCUT
который можно использовать для добавления ярлыков на главный экран. В следующем фрагменте кода мы создаем ярлык активности MainActivity с именем HelloWorldShortcut.
Сначала нам нужно добавить разрешение INSTALL_SHORTCUT
для Android манифеста xml.
<uses-permission
android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
на addShortcut()
метод создает новый ярлык на домашний экран.
private void addShortcut() {
//Adding shortcut for MainActivity
//on Home screen
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, "HelloWorldShortcut");
addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
Intent.ShortcutIconResource.fromContext(getApplicationContext(),
R.drawable.ic_launcher));
addIntent
.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
addIntent.putExtra("duplicate", false); //may it's already there so don't duplicate
getApplicationContext().sendBroadcast(addIntent);
}
обратите внимание, как мы создаем shortcutIntent объект, который держит нашу целевую активность. Это намерение объект добавляется в другое намерение как EXTRA_SHORTCUT_INTENT
.
наконец мы транслируем новое намерение. Это добавляет ярлык с именем, указанным как
EXTRA_SHORTCUT_NAME
и значок определяются EXTRA_SHORTCUT_ICON_RESOURCE
.
этот код, чтобы избежать нескольких сочетаний :
if(!getSharedPreferences(Utils.APP_PREFERENCE, Activity.MODE_PRIVATE).getBoolean(Utils.IS_ICON_CREATED, false)){
addShortcut();
getSharedPreferences(Utils.APP_PREFERENCE, Activity.MODE_PRIVATE).edit().putBoolean(Utils.IS_ICON_CREATED, true);
}