2010-05-25 66 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(),而不会出现任何特定条件。