我有一个BroadcastReceiver,它通过Intent和PendingIntent从Activity获取数据。代码工作正常,但当我重新启动我的设备和onReceive调用我得到错误... 我不知道是什么错误,因为他在我的手机重启后出现并且logchat无法注意到手机而且我没有看到错误......
的活动:
Intent intent = new Intent(addOne.this,AlarmReceiver.class);
intent.putExtra("msg", title.getText().toString());
intent.putExtra("note", note.getText().toString());
AlarmManager alarmMgr=(AlarmManager)getSystemService(Context.ALARM_SERVICE);
PendingIntent alarmIntent = PendingIntent.getBroadcast(getApplicationContext(), id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmMgr.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent);
接收器:
String msg=intent.getStringExtra("msg");
String note=intent.getStringExtra("note");
Intent startIntent = new Intent(context, alarmDialog.class);
startIntent.putExtra("msg",msg);
startIntent.putExtra("note",note);
startIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(startIntent);
清单:
<receiver android:name=".AlarmReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
我尝试将FLAG更改为FLAG_CANCEL_CURRENT仍然没有改变。 谢谢你的帮助。
答案 0 :(得分:0)
我想,可能会出现错误,因为重新启动手机后活动未启动,接收器仍会尝试接收您的字符串消息。
我不知道,你如何解决这个问题。当您的手机重启时,您的接收器将获得空值。尝试使用共享首选项或字符串缓冲区来存储接收方字符串值。
删除此代码
Intent intent = new Intent(addOne.this,AlarmReceiver.class);
intent.putExtra("msg", title.getText().toString());
intent.putExtra("note", note.getText().toString());
试试这个
Intent i = new Intent("my.action.string");
i.putExtra("msg",title.getText().toString());
i.putExtra("note", note.getText().toString());
sendBroadcast(i);
并在清单文件中指定此操作,这是您的接收器
<receiver android:name=".AlarmReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="my.action.string" />
</intent-filter>
</receiver>
现在使用代码
更改您的接收器代码public void onReceive(Context context, Intent intent)
{
if(intent.getAction().equals("my.action.string"))
{
SharedPreferences sharedpreferences = context.getSharedPreferences(MyPREFERENCESS, context.MODE_PRIVATE);
// get your intent which you have passed in receiver
String msg=intent.getStringExtra("msg");
// Now save your string with shared preference
sharedpreferences.edit().putString("msg1",msg).commit();
String note=intent.getStringExtra("note");
sharedpreferences.edit().putString("note1",note).commit();
}
// now get your sharedpreference String with boot complete
// and start activity with passing your string data
if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED))
{
// get the sharedpreference string and pass it with intent
// to alarmDialog.class
String message = sharedpreference.getString("msg1",msg1);
String notes = sharedpreference.getString("note1",note1);
Intent startIntent = new Intent(context, alarmDialog.class);
startIntent.putExtra("msg",message);
startIntent.putExtra("note",notes);
//startIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(startIntent);
}`
}`
您已设置操作Intent.ACTION_BOOT_COMPLETED
,使用上面的代码,您的共享首选项字符串将在设备启动完成时获取并传递给alarmDialog.class
。
您已在清单文件中指定了此操作,因此现在无需再次执行此操作。试试这段代码。 试试这个。