Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 应用程序关闭时报警管理器不工作_Android_Alarmmanager - Fatal编程技术网

Android 应用程序关闭时报警管理器不工作

Android 应用程序关闭时报警管理器不工作,android,alarmmanager,Android,Alarmmanager,我想在每天的特定时间发送通知。现在,我可以发送通知了。但是,问题是应用程序何时关闭。报警管理器似乎不工作,也不发送通知 以下是一项活动: public类MainActivity扩展了AppCompatActivity{ @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); noti(); } 公共无效通知{ 意向

我想在每天的特定时间发送通知。现在,我可以发送通知了。但是,问题是应用程序何时关闭。报警管理器似乎不工作,也不发送通知

以下是一项活动:

public类MainActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
noti();
}
公共无效通知{
意向意向=新意向(MainActivity.this,remenderalArmManagerBroadcast.class);
intent.setAction(“com.myapplication.game”);
意向书(“所有权”、“所有权”);
意图。额外(“小时”,14);
意图。额外(“分钟”,22);
int request=newrandom().nextInt((1000000-1)+1)+1;
Calendar alarmStartTime=Calendar.getInstance();
alarmStartTime.set(日历.小时/天,14);
alarmStartTime.set(日历分钟,22);
alarmStartTime.set(日历秒,00);
PendingEvent PendingEvent=PendingEvent.getBroadcast(getApplicationContext(),请求,意图,0);
AlarmManager AlarmManager=(AlarmManager)getSystemService(报警服务);
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.KITKAT){
alarmManager.setRepeating(alarmManager.RTC,alarmStartTime.getTimeInMillis(),alarmManager.INTERVAL_DAY,PendingContent);//设置每周重复
}
}
}
广播接收机

公共类提醒ArmManagerBroadcast扩展了BroadcastReceiver{
public static final String LOCK\u NAME\u static=“tag:com.myapplication.game”;
@凌驾
公共void onReceive(上下文、意图){
PowerManager PowerManager=(PowerManager)context.getSystemService(context.POWER\u服务);
PowerManager.WakeLock WakeLock=PowerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP,LOCK_NAME_STATIC);
wakeLock.acquire();
现在时间=新时间();
现在,setToNow();
if(intent.getAction()包含(“com.myapplication.game”)){
字符串标题=intent.getExtras().getString(“标题”);
整小时=intent.getExtras().getInt(“小时”);
int minute=intent.getExtras().getInt(“分钟”);
if(hour==now.hour&&minute==now.minute){
createNotificationChannel(上下文、标题);
}
}
wakeLock.release();
}
私有void createNotificationChannel(上下文上下文,字符串标题){
意向=无效;
意图=新意图(上下文,MainActivity.class);
int request=newrandom().nextInt((1000000-1)+1)+1;
intent.addFlags(intent.FLAG\u ACTIVITY\u CLEAR\u TOP);
PendingEvent PendingEvent=PendingEvent.getActivity(上下文、请求、意图、,
悬挂式帐篷(一杆旗帜);
字符串channelId=“1”;
Uri defaultSoundUri=RingtoneManager.getDefaultUri(RingtoneManager.TYPE_通知);
NotificationCompat.Builder notificationBuilder=
新建NotificationCompat.Builder(上下文,通道ID)
.setSmallIcon(R.mipmap.ic_启动器)
.setContentTitle(标题)
.setContentText(“消息”)
.setAutoCancel(真)
.setSound(defaultSoundUri)
.setContentIntent(挂起内容);
通知经理通知经理=
(NotificationManager)context.getSystemService(context.NOTIFICATION\u服务);
//因为需要android Oreo通知通道。
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.O){
NotificationChannel=新的NotificationChannel(信道ID,
“频道可读标题”,
NotificationManager.重要性(默认值);
notificationManager.createNotificationChannel(频道);
notificationManager.notify(请求,notificationBuilder.build());
}否则{
NotificationManagerCompat notificationManager1=NotificationManagerCompat.from(上下文);
notificationManager1.notify(请求,notificationBuilder.build());
}
}
}
我将广播接收者添加到清单中,如下所示:


我也有这些许可:



如何在应用程序关闭时修复它以发送通知?

定义您的意图,如下所示,您就可以开始了:

Intent intent = new Intent("YOUR_CUSTOM_ACTION");
intent.setClass(this, ReminderAlarmManagerBroadcast.class);

您需要搜索更多。从android 8.0及以上版本开始,不允许隐式
广播
声明。要解决这个问题,您需要在
intent
中设置target
receiver
类。这使它变得明确,意味着除此之外,
接收器
类将不会接收任何其他
广播。

我无法理解您需要按照您的意图设置目标接收器类。在android 8之前,当你用一个给定的动作声明一个接收器时,它可以用相同的动作接收所有的广播。它导致了安全问题和性能问题。自从android Oreo之后,广播接收器就可以接收那些明确声明类(此处
remenderalArmManagerBroadcast.class
)为目标的广播。