Android 无论用户在做什么,都会弹出对话框

Android 无论用户在做什么,都会弹出对话框,android,android-intent,android-activity,Android,Android Intent,Android Activity,我希望这不是一个类似问题的重复,但我还没有找到任何对我有帮助的东西 我正在创建一个简单的鸡蛋计时器,它工作得非常好。虽然我在挣扎一件事。 当计时器用完时,警报启动,并弹出一个显示为对话框的活动。虽然只有在我打开应用程序时才会发生这种情况。如果我打开另一个应用程序,闹钟响了,什么也没发生 所以我的问题是,无论用户在做什么,我如何使对话框弹出 目前,我显示对话框的方法如下所示: private void ShowTimesUp(){ Intent dialogIntent = new Int

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

我正在创建一个简单的鸡蛋计时器,它工作得非常好。虽然我在挣扎一件事。 当计时器用完时,警报启动,并弹出一个显示为对话框的活动。虽然只有在我打开应用程序时才会发生这种情况。如果我打开另一个应用程序,闹钟响了,什么也没发生

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

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

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>
清单如下所示:

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>

试试这个:

public static final int TIMEOUT = 60 * 1000;

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

附言:我没有测试这个,希望它有帮助

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

现在我只是想知道是否有可能从 由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);
现在,在您的
MainActivity
onStart()
方法中,您可以执行以下操作:

boolean startDialog = getIntent().getBooleanExtra(START_DIALOG, false);
if (startDialog) {
    Intent dialogIntent = new Intent(MainActivity.this, TimesUpDialog.class);
    startActivityForResult(dialogIntent, REQUEST_CODE_CONSTANT);
}
其中,
START\u DIALOG
是一个字符串常量,用于定义意图额外值的键,
MainActivity
是启动程序活动


希望这对您有用。

您如何设置计时器?你在用广播接收机吗?如果是这样,请编辑您的帖子并包含其代码。有关警报的教程,可能会有所帮助。您可以替换本例中的Toast并将其更改为startActivity(),这样无论当前运行的是什么,当警报触发时,它都会弹出您的活动。这只适用于@gyurimajersik!现在我只是想知道是否有可能从AlarmManager启动的意图中获得结果?很高兴它对您起到了作用,不要忘记接受答案。。。现在,关于第二个问题。。。我认为这是可能的。让我来编辑我的答案。我无法让编辑中发布的代码正常工作,但是为了我自己澄清一下,超时常量只是推迟了意图应该显示的时间,对吗?我希望从对话框中得到结果的原因是,当用户按下对话框中的按钮时,只需关闭警报。我是否可以关闭对话框内的警报,但将警报对象添加到对话框意图中,然后使用您的初始建议?为什么不在用户按下正确按钮时关闭警报?这也是我最终可能要做的事情。我最初的想法是让计时器在对话框结束时启动,并向用户显示要按下的按钮。但我可能会跳过对话。