Данные уведомления о тревоге исчезают после перезагрузки телефона - PullRequest
0 голосов
/ 19 ноября 2018

Я создаю приложение для уведомлений, которое использует диспетчер сигналов для установки нескольких уведомлений, чтобы напоминать пользователю о ежедневных задачах, когда телефон включен Все хорошо, но при перезагрузке телефона уведомление отображается, но данные уведомленияпотерянные (например, содержимое уведомлений) эти данные были сохранены в намерениях из моего первого действия, это код ниже.(я добавил разрешение и получил действие к своему манифесту), пожалуйста, мне нужна помощь

public class add_rreminde extends AppCompatActivity implements View.OnClickListener{

private int notificationId=1;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add_rreminde);

    //buton ok
    findViewById(R.id.but).setOnClickListener(this);
    findViewById(R.id.cancel).setOnClickListener(this);
}
@Override
public void onClick(View view){

    EditText remide=findViewById(R.id.edit);
    DatePicker date=findViewById(R.id.date);

    Intent intent=new Intent(add_rreminde.this,AlarmReciver.class);
    intent.putExtra("notificationId",notificationId);
    intent.putExtra("todo",remide.getText().toString());
    final int _id=(int)System.currentTimeMillis();
    PendingIntent alarmIntent=PendingIntent.getBroadcast(add_rreminde.this,_id,intent,PendingIntent.FLAG_ONE_SHOT);

    AlarmManager alarm=(AlarmManager)getSystemService(ALARM_SERVICE);
    switch (view.getId()){
        case(R.id.but):
            int day=date.getDayOfMonth();
            int month=date.getMonth();
            int year=date.getYear();

            //create date
            Calendar startDate=Calendar.getInstance();
            startDate.set(Calendar.DAY_OF_MONTH,day);
            startDate.set(Calendar.MONTH,month);
            startDate.set(Calendar.YEAR,year);
            Long alarmStartDate=startDate.getTimeInMillis();

            //setAlarme
            alarm.set(AlarmManager.RTC_WAKEUP,alarmStartDate,alarmIntent);

            Toast.makeText(getApplicationContext(),"done",Toast.LENGTH_LONG).show();
            break;
        case (R.id.cancel):
            alarm.cancel(alarmIntent);
            Toast.makeText(getApplicationContext(),"canceled",Toast.LENGTH_LONG).show();
            break;
    }


}
  }

моего получателя с push-уведомлением

public class AlarmReciver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    //get id from notification id intent
    int notification =intent.getIntExtra("notificationId",0);
    String getMessage=intent.getStringExtra("todo");

    //when notification is opened open mainActivity
    Intent mainIntent=new Intent(context,add_rreminde.class);
    PendingIntent contentIntent=PendingIntent.getActivity(context,0,mainIntent,0);

    NotificationManager mynotificationManager=(NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);

    //prepare notification
    Notification.Builder builder=new Notification.Builder(context);
    builder.setSmallIcon(R.drawable.assistant)
            .setContentTitle("changer oil")
            .setContentText(getMessage)
            .setWhen(System.currentTimeMillis())
            .setAutoCancel(true)
            .setContentIntent(contentIntent)
            .setPriority(Notification.PRIORITY_MAX)
            .setDefaults(Notification.DEFAULT_ALL);

    //notify
    mynotificationManager.notify(notification,builder.build());

}
}

1 Ответ

0 голосов
/ 19 ноября 2018

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

, чтобы вы могли добавить BroadcastReceiver для получения ACTION_BOOT_COMPLETED

во-первых:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

и:

<receiver android:name=".SampleBootReceiver"
        android:enabled="true">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"></action>
    </intent-filter>
</receiver>

теперь вы снова устанавливаете будильник при перезагрузке устройства:

public class SampleBootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
            // Set the alarm here.
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...