当前位置: 首页 > 知识库问答 >
问题:

重新启动手机后警报通知数据消失

张锐藻
2023-03-14

我正在构建一个通知应用程序,它使用警报管理器设置多个通知来提醒用户的日常任务,当手机打开一切都很好,但当重新启动手机时,通知会出现,但通知数据会丢失(例如通知内容),这些数据从我的第一个活动中保存到意图中,这是下面的代码。(

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;
    }


}
  }

我的推送通知接收器

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

公西修文
2023-03-14

默认情况下,当设备关闭时,所有警报都会被取消。为防止这种情况发生,您可以将应用程序设计为在用户重新启动设备时自动重新启动重复警报。

因此,您可以添加一个BroadcastRecader来接收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.
        }
    }
}
 类似资料:
  • 问题内容: 我想创建带有通知消息的广播AlarmManager(重复)。我从Pickers中传递日历对象。如果我不重启设备,它将正常工作。但是,当我重新启动设备时,您知道我的calander对象将为null。重新启动后如何管理重复警报以及如何保留日历时间表?感谢您的想法。 问题答案: 您需要使用并将其设置为响应消息。例如 在清单中注册您的 在代码中处理消息 MyBootReceiver.java

  • 我正在开发一个使用firebase实时数据库的聊天应用程序。我能够交换消息,但我希望有一个消息警报通知新消息。发送通知使用firebase控制台是工作的,但现在我想自动化它没有firebase控制台。 安卓客户端之间的推送通知需要创建自己的app服务器吗?或者有没有另外一种方法来实现这一点,而不是创建一个服务器? 谢谢

  • 问题内容: 我的日食没有启动,因为我的计算机有点死机了,所以我不得不强制重新启动它。当我不得不重新启动时,Eclipse是打开的,我相信这很可能是原因。我不知道该如何解决。每当我尝试打开它时,它都会告诉我检查工作区中的.log文件,并显示: http://paste.strictfp.com/26579 而且我不知道如何解决它。请帮忙? 问题答案: 您缺少 第125行的 类,您必须重新安装才能解决

  • 手机通知功能便于您通过手表收到来电、信息和应用程序通知提醒。您在手表上收到的通知与手机上收到的相同。手机通知适用于 iOS 和 Android 手机。 若要使用手机通知,您需要在手机上安装 Polar Flow 应用,并且还需要将其与手表配对。请参阅将移动设备与手表配对,了解相关说明。 将手机通知设置为开启 在手表上,进入 Settings(设置) > General settings(一般设置)

  • 手机通知功能便于您通过手表收到来电、信息和应用程序通知提醒。您在手表上收到的通知与手机上收到的相同。手机通知适用于 iOS 和 Android 手机。 若要使用手机通知,您需要在手机上安装 Polar Flow 应用,并且还需要将其与手表配对。请参阅将移动设备与手表配对,了解相关说明。 将手机通知设置为开启 在手表上,进入 Settings(设置) > General settings(一般设置)

  • 我正在开发一个倒计时应用程序,目前正在尝试在倒计时运行时退出应用程序时显示通知。相应地,我希望在用户返回应用程序时通知消失。 到目前为止,我已经设法使它适用于带有静态文本的简单通知,执行以下操作:在MainActivity.java中,在onStop()中,我创建一个意图并使用start Service(意图)启动服务。对称地,在onStart()中,我运行stop Service(意图),以便当