2010-05-25 2 views
0

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

вот мой setupShortcut()

private void setupShortcut() { 
    Intent shortcutIntent = new Intent(this, Toggle.class); 
    // shortcutIntent.setClassName(this, Toggle.class.getName()); 
    shortcutIntent.putExtra(EXTRA_KEY, "ToggleShortcut"); 

    shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 


    Intent intent = new Intent(); 
    intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); 
    intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "ToggleShortcut"); 
    Parcelable iconResource = Intent.ShortcutIconResource.fromContext(this, R.drawable.app_sample_code); 
    intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource); 
    setResult(RESULT_OK, intent); 

} 

Toggle.class является деятельность, которая переключает состояние для меня. В манифесте У меня есть эти настройки на нем

<activity android:name=".Toggle" android:exported="true" android:theme="@android:style/Theme.Translucent.NoTitleBar"> 

Как теперь я могу создать ярлык на главном экране нажмите. В первый раз, когда я нажимаю на него, он запускает действие Toggle и отлично его завершает, но также открывает активность TimeClock на экране. Если я тогда нажму кнопку «Назад», я вернусь домой. Теперь я могу нажать этот ярлык, и он запустит действие Toggle и не изменит экран. Прежде чем я добавил: shortcutIntent.addFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP); Каждый раз он будет открывать активность TimeClock. Теперь это только первый раз. Но я хочу, чтобы он никогда ничего не показывал на экране, когда нажата клавиша Toggle. Кто-нибудь знает, как избавиться от этого?

ответ

4

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

+0

Вы также можете просто вызвать функцию finish() в методе onCreate() Activity, Activity не будет отображаться. Для этого услуга будет излишней. –

+0

Я вызываю finish() в Toggle Activity. Я также никогда не называю setContentView(); Это работает для всех, но в первый раз я нажимаю ярлык. Я помещал вывод журнала в onCreate() активности TimeClock и обнаружил, что он не вызывается при нажатии на ярлык. Он просто принимает уже открытый экземпляр деятельности и показывает ее. Я также попытался сделать намерение setupShortcut() перейти к «com.timeclock.TOGGLE». Я поместил это как фильтр намерений в свою активность TimeClock и поместил оператор if, чтобы проверить действие на входящем намерении. – Tim

+0

Этот оператор if перед setContentView. И он вызывает finish(), но я все равно получаю черную вспышку экрана, когда я нажимаю ярлык. – Tim

0

Вы можете «просто» сделать скрытую деятельность, которая будет делать то, что вы хотите!

В этом упражнении должны использоваться прозрачные темы, чтобы он никогда не показывался и не вызывал finish() в конце onCreate() без каких-либо особых условий.