PendingIntent导致错误

时间:2015-06-12 15:04:44

标签: android android-pendingintent

我有一个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仍然没有改变。 谢谢你的帮助。

1 个答案:

答案 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

您已在清单文件中指定了此操作,因此现在无需再次执行此操作。试试这段代码。 试试这个。