我的应用程序包含两个活动,一个小部件和一个广播接收器。
第一个活动是默认活动,由家庭启动器调用。第二个活动是一个提醒对话框活动,它播放 MP3 并有一个关闭按钮。它将出现在主屏幕上。
我的小部件是一个自定义时钟,它设置一个闹钟,每分钟调用一个广播接收器,负责更新时钟。在特定时间有一些提醒,广播接收者调用提醒活动。
我的应用程序现在可以正常工作了,但是有一个小问题:当应用程序在后台打开时(它不在屏幕上),当广播接收器启动提醒活动时,默认活动首先出现并显示提醒活动。但是当我关闭应用程序时,主屏幕上会出现提醒活动并且没有问题。
这是我用来从接收器 startActivity 的代码:
context.startActivity(new Intent(context, ActivityReminder.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP));
这是android清单:
<activity android:name=".MyActivity"
android:theme="@android:style/Theme.Black.NoTitleBar"
android:label="@string/app_name"
android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name=".ActivityReminder" android:label="@string/reminder" android:screenOrientation="portrait" android:theme="@style/Theme.CustomDialog" />
<receiver android:name=".widget"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/widget" />
</receiver>
<receiver android:name=".UpdaterReceiver" />
现在我在默认活动中使用这个解决方法来解决问题,它就像关闭应用程序一样工作:
@Override
protected void onPause()
{
super.onPause();
finish();
}
我发现了更烦人的事情。如果主要活动未关闭,则广播接收器的每个调用都会再次打开活动,即使它已经打开。虽然如果主要活动关闭,后续调用将不会做任何事情。