2011-01-12 2 views
15

У меня есть приложение, которое позволяет создавать «ярлыки» на главном экране. Но могу ли я обнаружить, что «ярлыки» уже существуют, мне не нужно было создавать его снова. Спасибо.Как обнаружить ярлык на главном экране

+0

Вы нашли что-нибудь? – Ran

+0

нет, я не нашел подсказок. – user430926

+1

Принятый ответ все еще работает на Lollipop, он просто терпит неудачу на Jelly Bean по неизвестной мне причине. – ILikeTacos

ответ

10

У меня была такая же проблема. Я не думаю, что это возможно для вас, чтобы сказать, если он есть, но я думаю, что то, что я использовал, будет работать и на вас.

Просто удалите ярлык, прежде чем добавлять его!

intent.setAction("com.android.launcher.action.UNINSTALL_SHORTCUT"); 
getApplicationContext().sendBroadcast(intent); 

intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); 
getApplicationContext().sendBroadcast(intent); 

Просто убедитесь, что вы добавили следующее в файл манифеста.

<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"/>  
+0

На боковой ноте ярлык снова появится там, где он был последним. Очень полезно – styler1972

+0

Деинсталляция для меня не работает – Guy

+0

@Guy Uninstall будет работать только в том случае, если 'SHORTCUT_INTENT' и' SHORTCUT_NAME', которые вы помещаете в трансляцию «Intent», фактически соответствуют ярлыку, который находится на рабочем экране пользователя. –

8

Я не знаю, можно ли обнаружить ярлык или нет, но вместо того, чтобы удалить, а затем установить, вы можете использовать дополнительное поле

intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); 
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, appName); 
... 
intent.putExtra("duplicate", false); 
... 
sendBroadcast(intent); 
+0

Пробовали ли вы это? Можете ли вы более подробно рассказать о намерении.putExtra («duplicate», false); Спасибо. – user430926

+0

Это работает, просто попробовал. +1 – prolink007

+0

Отлично работает! Огромная помощь. – Guy

1

Я думаю, что я нашел хороший способ убедиться, что ярлык не добавляется более одного раза, а также сообщение Toast, чтобы уйти. Сделать Int или логическое значение (я использовал INT) и поместите в onResume:

if(shortcut != 1) //or shortcut == true 
{ 
    ...(shortcut code)... 
    shortcut = 1; 
    savePref("shortcut", shortcut); //overriding method to save int's or booleans 
} 

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

+0

Если пользователь вручную добавил ли он сам, или если автозапуск в магазине воспроизведения добавит его, он все равно получит 2 ярлыка? –

+0

В игровом магазине не будет добавлен ярлык, его код будет выполнен. Но если пользователь возится с apk, он или он должен быть продвинутым пользователем. При установке приложения ваше «я» будет просто делать то, что делает игровой магазин, если у вас его уже нет на главном экране, на котором он уже был на вашем устройстве. Я считаю, что если вы обновите приложение через магазин воспроизведения, я думаю, что он удалит устаревшую версию вместе со старым ярлыком и переустановит новую.Как только пользователь откроет его, он должен снова создать ярлык ... – abotrix

+2

В игровом магазине не будет добавлен ярлык, который будет выполняться по коду. > Это неправда. В последнем меню магазина есть опция. –

Смежные вопросы