Android получает дополнительное в ресивере после перезагрузки

Я разрабатываю приложение, которое напоминает пользователю. Он работает хорошо, но когда я устанавливаю его и перезагружаю, устройство возвращает ноль в уведомлении. Я думаю, что проблема в широковещательном приемнике. Потому что невозможно получить какую-либо строку из дополнительных намерений.

-- в деятельности --

private void setAlarm() {
    Intent myIntent = new Intent(this, AlarmReceiver.class);
    String data = descripton.getText().toString();
    Bundle b = new Bundle();
    b.putString("notify_message", data);
    myIntent.putExtras(b);
    pendingIntent = PendingIntent.getBroadcast(this, 0, myIntent,
            PendingIntent.FLAG_CANCEL_CURRENT);
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC, cal.getTimeInMillis(), pendingIntent);
}

-- манифест --

 <receiver  android:name=".ekstra.AlarmReceiver"
            android:enabled="true"
            android:exported="true"
            android:label="StartMyServiceAtBootReceiver">
            <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

-- широковещательный приемник --

@Override
public void onReceive(Context context, Intent intent) {
    try {
        Bundle extras = intent.getExtras();
        //Afret reboot test1 and test2 is null
        String test1 = extras.getString("notify_message");
        String test2 = intent.getStringExtra("notify_message");
        Intent newIntent = new Intent(context, RemindingService.class);
        newIntent.putExtra("messaage", message);
        context.startService(newIntent);
    } catch (Exception e) {
        Log.e("Test", "error " + e.toString());
    }
}

person El_Mundo    schedule 12.08.2015    source источник
comment
После перезагрузки вы больше не будете получать эти трансляции, потому что ваше расписание AlarmManager будет удалено.   -  person CommonsWare    schedule 12.08.2015
comment
нет, я могу получать трансляции и получать уведомления, но после перезагрузки это всегда нулевое значение, это моя проблема   -  person El_Mundo    schedule 12.08.2015
comment
Потом где-то переназначаешь будильники, а где-то забываешь поставить дополнительные. Повторяю: ваше расписание AlarmManager будет стерто при перезагрузке.   -  person CommonsWare    schedule 12.08.2015
comment
спасибо большое это моя вина :) вы правы   -  person El_Mundo    schedule 12.08.2015


Ответы (1)


Как указано выше, вы не будете получать трансляции после перезагрузки. Но здесь, если вы вызываете тот же AlarmReceiver, когда загрузка завершена, которая транслируется системой Итак, следующее вернет значение null

String test1 = extras.getString("notify_message");//test1 is null

OR

String test2 = intent.getStringExtra("notify_message");//test2 is null

(оба вызова эквивалентны)

Таким образом, вы должны выполнять свою логику в зависимости от того, вызывается ли Receiver после загрузки или из-за тревоги. Вы можете сделать что-то подобное в своем AlarmReceiver:

String msg = intent.getStringExtra("notify_message");
if(msg==null){
      //means that receiver started after boot
      // write your logic here
}else{
      //means that receiver started by alarm
      //write your logic here
}
person VIjay J    schedule 12.08.2015
comment
Так нет ли способа сохранить конкретное значение для извлечения после перезагрузки? Если вам нужно передать определенное пользователем значение, чтобы выжить при перезагрузке (без использования общих настроек), как вы можете восстановить это значение? - person Ben Mora; 15.01.2021