所以我的应用程序有一个计时器,当它倒计时显示在主要活动中。我希望在计时器完成时播放闹钟,因此我使用AlarmManager和类来安排发出警报的意图以扩展BroadcastReceiver。
一切正常,直到闹钟响起。我将崩溃追踪到我在AlertDialog上调用show()的行。我觉得它与应用程序上下文和不在MainActivity中的代码有关,但我似乎无法找到具有类似配置和相同崩溃源的任何内容。
以下是警告对话框代码
public class SoundAlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
...///Play sound code is here and works
final CharSequence [] options = {"OK"};
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Title");
builder.setMessage("Beer is done!");
builder.setCancelable(false);
builder.setItems(options, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
if(which == 0) {
mp.stop();
mp.release();
}
}
});
AlertDialog alert = builder.create();
alert.show();
... //other stuff
以下是使用MainActivity.java中的AlarmManager进行计划的代码:
//Schedule the alarm
Intent alarmIntent = new Intent(MainActivity.this, SoundAlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE);
Calendar fireTime = Calendar.getInstance();
fireTime.setTimeInMillis(System.currentTimeMillis());
fireTime.add(Calendar.MILLISECOND, time);
alarmManager.set(AlarmManager.RTC_WAKEUP, fireTime.getTimeInMillis(), pendingIntent);
另外,另外,将待处理意图的MainActivity.this更改为getApplicationContext()并不能解决崩溃问题。看到很多人建议使用其中一个,但无论我使用哪一个,我的崩溃都会持续存在。
答案 0 :(得分:1)
我觉得它与应用程序上下文和不在MainActivity中的代码有关,
是的,您需要Activity
才能显示Dialog
。
您可以做的是与您想要的Activity
建立单独的layout
,并从Receiver
开始。您可以将以下代码添加到<activity>
的{{1}}标记中,使其显示为manifest.xml
。
Dialog
注意:活动提供了管理对话框的创建,保存和恢复的工具。