2

我希望这不是类似问题的重复,但找​​不到任何对我有帮助的东西。

我正在创建一个简单的鸡蛋计时器,效果很好。虽然我正在努力做一件事。当计时器用完时,会启动警报并弹出显示为对话框的活动。虽然只有当我打开应用程序时才会发生这种情况。如果我打开另一个应用程序并且警报响起,则不会发生任何事情。

所以我的问题是,无论用户在做什么,如何让对话框弹出?

目前,我显示对话框的方法如下所示:

private void ShowTimesUp(){
    Intent dialogIntent = new Intent(getBaseContext(), TimesUpDialog.class);
    dialogIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivityForResult(dialogIntent, 1);
}

清单如下所示:

    <activity android:name=".Home"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>

    <activity android:name=".TimesUpDialog" android:theme="@android:style/Theme.DeviceDefault.Dialog"></activity>
4

1 回答 1

1

尝试这个:

public static final int TIMEOUT = 60 * 1000;

...

Intent dialogIntent = new Intent(getBaseContext(), TimesUpDialog.class);
    dialogIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

PendingIntent intent = PendingIntent.getActivity(YourApplication.getInstance().getBaseContext(), 0,
            dialogIntent, dialogIntent.getFlags());

AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + TIMEOUT, intent);

我认为您不需要任何其他计时器逻辑。

PS:我没有测试这个,希望它有帮助。

编辑:以下评论中提到的问题的可能解决方案

现在我只是想知道是否可以从 AlarmManager 启动的意图中获得结果?

上面的代码应该改成这样:

Intent startApplicationIntent = new Intent(getBaseContext(), MainActivity.class);
    dialogIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startApplicationIntent.putExtra(START_DIALOG, true);

PendingIntent intent = PendingIntent.getActivity(YourApplication.getInstance().getBaseContext(), 0,
            startApplicationIntent, startApplicationIntent.getFlags());

AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + TIMEOUT, intent);

现在在您MainActivityonStart()方法中,您可以执行以下操作:

boolean startDialog = getIntent().getBooleanExtra(START_DIALOG, false);
if (startDialog) {
    Intent dialogIntent = new Intent(MainActivity.this, TimesUpDialog.class);
    startActivityForResult(dialogIntent, REQUEST_CODE_CONSTANT);
}

哪里START_DIALOG是定义意图额外值键的字符串常量,并且 MainActivity是启动器活动。

希望这对你有用。

于 2013-03-27T13:47:40.513 回答