Android无法通过额外的意图虽然AlarmManager意图、Android、AlarmManager

2023-09-12 22:05:46 作者:旧城老巷

我试图把一个额外的消息,在我的意图传递给AlarmManager在以后的时间被触发。我的onReceive正确触发,但extras.getString()返回null

设置:

 公共PendingIntent getPendingIntent(INT uniqueRequest code,字符串额外的){
    意向意图=新的意图(这一点,ActionReceiver.class);
    intent.putExtra(额外的,另计);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(这一点,uniqueRequest code,
            意图,0);
    返回pendingIntent;
}

公共无效setSilentLater(TimeRule timeRule){
    布尔[]平日= timeRule.getReoccurringWeekdays();
    INT DAYOFWEEK = 0;

    对于(布尔日:周一至周五){
        一周中的某天++;
        如果(天==真){
            日历CAL = Calendar.getInstance();

            AlarmManager alarmManager =(AlarmManager)本
                    .getSystemService(Context.ALARM_SERVICE);

            cal.set(Calendar.DAY_OF_WEEK,星期几);
            cal.set(Calendar.HOUR_OF_DAY,
                    。timeRule.getStartTime()得到(Calendar.HOUR_OF_DAY));
            cal.set(Calendar.MINUTE,
                    。timeRule.getStartTime()得到(Calendar.MINUTE));
            cal.set(Calendar.SECOND,0);
            cal.set(Calendar.MILLISECOND,0);

            alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
                    cal.getTimeInMillis(),3600000 * 7,getPendingIntent(0,RINGER_OFF));
  }
 }
}
 

在此触发,消息是空的:

 公共类ActionReceiver扩展的BroadcastReceiver {

    @覆盖
    公共无效的onReceive(上下文的背景下,意图意图){
         捆绑额外= intent.getExtras();
         字符串消息= extras.getString(额外); //空
         如果(消息==RINGER_OFF)
         {
             AudioManager上午=(AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
             am.setRingerMode(AudioManager.RINGER_MODE_SILENT);
         }
         否则,如果(消息==RINGER_ON)
         {
             AudioManager上午=(AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
             am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
         }
    }
}
 

解决方案

  //前更换code
    捆绑额外= intent.getExtras();
    字符串消息= extras.getString(额外);
//后更换code
     字符串消息= intent.getStringExtra(额外);

                     要么

//前替换code
   意向意图=新的意图(这一点,ActionReceiver.class);
   intent.putExtra(额外的,另计);
//后更换code
   意向意图=新的意图(这一点,ActionReceiver.class);
   束束=新包();
   bundle.putString(额外的,另计);
   intent.putExtras(包);
 
留给国内32位Android应用的时间,已经不多了

I am trying to put an extra message in my intent to pass to AlarmManager to be triggered at a later time. My onReceive triggers correctly but extras.getString() returns null

Setup:

public PendingIntent getPendingIntent(int uniqueRequestCode, String extra) {
    Intent intent = new Intent(this, ActionReceiver.class);
    intent.putExtra("EXTRA", extra);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, uniqueRequestCode,
            intent, 0);
    return pendingIntent;
}

public void setSilentLater(TimeRule timeRule) {
    boolean[] weekdays = timeRule.getReoccurringWeekdays();
    int dayOfWeek = 0;

    for (boolean day : weekdays) {
        dayOfWeek++;
        if (day == true) {
            Calendar cal = Calendar.getInstance();

            AlarmManager alarmManager = (AlarmManager) this
                    .getSystemService(Context.ALARM_SERVICE);

            cal.set(Calendar.DAY_OF_WEEK, dayOfWeek);
            cal.set(Calendar.HOUR_OF_DAY,
                    timeRule.getStartTime().get(Calendar.HOUR_OF_DAY));
            cal.set(Calendar.MINUTE,
                    timeRule.getStartTime().get(Calendar.MINUTE));
            cal.set(Calendar.SECOND, 0);
            cal.set(Calendar.MILLISECOND, 0);

            alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
                    cal.getTimeInMillis(), 3600000 * 7, getPendingIntent(0, "RINGER_OFF"));
  }
 }
}

When this triggers, message is empty:

public class ActionReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
         Bundle extras = intent.getExtras();
         String message = extras.getString("EXTRA"); //empty        
         if(message == "RINGER_OFF")
         {
             AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
             am.setRingerMode(AudioManager.RINGER_MODE_SILENT);
         }
         else if(message == "RINGER_ON")
         {
             AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
             am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
         }
    }
}

解决方案

// before replace code 
    Bundle extras = intent.getExtras();
    String message = extras.getString("EXTRA");
// after replace code 
     String message = intent.getStringExtra("EXTRA");

                     OR

// before replace code 
   Intent intent = new Intent(this, ActionReceiver.class);
   intent.putExtra("EXTRA", extra);
// after replace code 
   Intent intent = new Intent(this, ActionReceiver.class);
   Bundle bundle = new Bundle();
   bundle.putString("EXTRA", extra);
   intent.putExtras(bundle);