2013-03-27 34 views
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> 
+2

你怎么设置你的计时器?你在使用广播接收机吗?如果是这样,编辑你的文章并包含它的代码。 [另请参阅此处](http://code4reference.com/2012/07/tutorial-on-android-alarmmanager/)了解可能有所帮助的警报教程。您可以在此示例中替换Toast,并将其更改为startActivity(),无论当前运行的是什么,都会导致警报触发时弹出您的Activity。 – FoamyGuy 2013-03-27 13:26:30

回答

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

现在onStart()方法,你可以做到以下几点:

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是启动器的活动。

希望这对你有用。

+0

这只是@GyuriMajercsik!现在我只是想知道是否可以从AlarmManager启动的意图中得到结果? – frmi 2013-03-27 15:25:07

+0

很高兴为你效劳,不要忘记接受答案......现在,与第二个问题有关...我认为这是可能的。让我编辑我的答案。 – 2013-03-27 16:07:14

+0

我无法让编辑中发布的代码正常工作,但仅仅为了澄清我自己,TIMEOUT常数只是在意图显示正确时才推迟? 我想要对话结果的原因是当用户在对话框中按下按钮时简单地关闭闹钟。我可以关闭对话框中的警报,但是将警报对象添加到对话框意图中,然后使用您的初始建议? – frmi 2013-03-27 17:04:57