2010-05-25 99 views
0

我已經做了一個簡單的打卡/打出時鐘應用程序。我想添加用戶在主屏幕上創建快捷方式的選項,該選項將切換應用程序的狀態(超時/超時),但我不希望此快捷方式在屏幕上打開應用程序。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活動。如果我然後按下後退按鈕,我會回到家中。我現在可以按下這個快捷鍵,它將啓動切換活動並且不改變屏幕。在我添加之前:shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);它會每次打開TimeClock活動。現在這只是第一次。但是我希望它在按下切換快捷鍵時不會在屏幕上顯示任何內容。有沒有人有任何想法如何擺脫這一點?

回答

4

發射器的問題在於它們啓動了活動,而您想要啓動服務以便您可以在後臺修改應用程序狀態。這聽起來像你真正想做的是做一個Widget,而不是一個啓動器的快捷方式。您可以配置小部件,使其具有一個可以在後臺切換事物的服務。

+0

你也可以在Activity的onCreate()方法中調用finish(),Activity不會顯示出來。對於這一點,服務將是矯枉過正的。 – 2010-05-26 00:04:16

+0

我在切換活動中調用finish()。我也永遠不會調用setContentView();這對所有人都有效,但是我第一次按快捷鍵。我在TimeClock活動的onCreate()中放置了一個Log輸出,並發現它在推送快捷方式時沒有被調用。它只是採取已經公開的活動實例並展示它。我也試着讓setupShortcut()意圖轉到「com.timeclock.TOGGLE」,我把它作爲我的TimeClock活動的一個intent過濾器,並把一個if語句來檢查傳入意圖上的動作。 – Tim 2010-05-26 17:20:34

+0

這個if語句在setContentView之前。它會調用finish(),但當我按下快捷鍵時,仍然會看到黑屏。 – Tim 2010-05-26 17:21:16

0

你可以「更簡單地」做一個隱藏的活動,將做你想做的!

此活動必須使用透明主題,因此它不會在onCreate()的末尾顯示並調用finish(),而不會出現任何特定條件。