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

时间:2013-03-27 13:25:24

标签: android android-intent android-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>

1 个答案:

答案 0 :(得分: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);

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

P.S。:我没有测试过这个,希望它有所帮助。

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

  

现在我只是想知道是否有可能从中得到结果   意图由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的{​​{1}}方法执行以下操作:

onStart()

其中boolean startDialog = getIntent().getBooleanExtra(START_DIALOG, false); if (startDialog) { Intent dialogIntent = new Intent(MainActivity.this, TimesUpDialog.class); startActivityForResult(dialogIntent, REQUEST_CODE_CONSTANT); } 是一个String常量,用于定义intent额外值的键,START_DIALOG是Launcher活动。

希望这适合你。