2016-10-07 2 views
0

Я делаю приложение, которое делает ярлык на главном экране для другого приложения, если оно установлено.Ярлык главного экрана для другого приложения

Это работает частично. На уровне API менее 23 он работает отлично. На android 6 он создает ярлык, но обходит Intent.EXTRA_SHORTCUT_NAME и Intent.EXTRA_SHORTCUT_ICON_RESOURCE и оставляет оригинальную иконку и имя, которые я не хочу использовать.

Вот пример кода, я использую:

ApplicationInfo selectedApp; //app that should be used for shortcut 
Intent shortcutIntent = new Intent(getPackageManager().getLaunchIntentForPackage(selectedApp.packageName)); 
shortcutIntent.setAction(Intent.ACTION_MAIN); 
addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "MyNewShortcut"); 
addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(getApplicationContext(), R.drawable.ic1)); 
addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); 
addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); 
addIntent.putExtra("duplicate", false); 
getApplicationContext().sendBroadcast(addIntent); 

Manifest:

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

Есть ли что-нибудь другое, что я должен делать на Android Зефир?

EDIT

Ok, это немного сбивает с толку. Мне удалось как-то заставить его работать.
Когда я добавляю эту строку:

shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "asd"); 

Это создает ярлык на главном экране, но с именем, которое я поставил на addIntent, а не "asd" как на новой линии. Есть ли для этого логическое объяснение?

+0

можно лучше, чтобы добавить разрешений во время выполнения также, если вы хотите использовать его в андроиде ** M ** –

+0

Это разрешение нормального уровня, не опасно, так что doen't требуется запрос времени выполнения. Достаточно установить его в Manifest.xml – filipst

ответ

0

Кажется, что есть какая-то ошибка для Android M.

Для ярлыка, чтобы получить новую иконку и имя, мне пришлось добавить дополнительное имя в первое намерение. И это может быть пустая строка, потому что имя останется от второго намерения. В настоящее время она работает так:

ApplicationInfo selectedApp; //app that should be used for shortcut 

Intent shortcutIntent = new Intent(getPackageManager().getLaunchIntentForPackage(selectedApp.packageName)); 
shortcutIntent.setAction(Intent.ACTION_MAIN); 
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "asd"); //EDIT additional string for first intent that fixes Android M 

addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "MyNewShortcut"); 
addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(getApplicationContext(), R.drawable.ic1)); 
addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); 
addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); 
addIntent.putExtra("duplicate", false); 

getApplicationContext().sendBroadcast(addIntent); 
Смежные вопросы