Java 无法从broadCastReceiver的onReceive方法启动活动
我正在开发一个报警应用程序。 在这里,我使用的是广播接收器和报警管理器。当警报关闭时,会调用onReceive方法,然后从onReceive方法调用startActivity来启动一个意图 但我面临的问题是,在某些设备中,当应用程序处于后台或被终止时,活动无法启动 在onReceive方法中,我有三件事:Java 无法从broadCastReceiver的onReceive方法启动活动,java,android,android-intent,broadcastreceiver,alarmmanager,Java,Android,Android Intent,Broadcastreceiver,Alarmmanager,我正在开发一个报警应用程序。 在这里,我使用的是广播接收器和报警管理器。当警报关闭时,会调用onReceive方法,然后从onReceive方法调用startActivity来启动一个意图 但我面临的问题是,在某些设备中,当应用程序处于后台或被终止时,活动无法启动 在onReceive方法中,我有三件事: 吐司 铃声管理器 意图 现在我们有两个案子 当我们在onReceive方法(toast、ringtone manager和intent)中包含所有三项时,toast和ringtone将分别播放
谢谢你这不是你应该处理警报的方式,你应该使用。你在舱单上注册了你的接收器吗?@ianhanniballake谢谢你的建议,我正在尝试让我们看看works@RavenYang是的,我已经注册了manifest@ianhanniballake我按照你的建议试过了,但没有成功。请看一下编辑过的问题
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "In broadcast receiver", Toast.LENGTH_LONG).show();
Bundle args = intent.getBundleExtra(Constants.BROADCAST_RECEIVER_BUNDLE);
Alarms alarms = (Alarms) args.getSerializable(Constants.ALARM_OBJECT);
int alarmRequestCode = args.getInt(Constants.ALARM_REQUEST_CODE);
Intent OpenAppIntent = new Intent();
// I also tried with adding classes in intent object directly eg new Intent(context, MyActivity.class) but no luck
OpenAppIntent.setClass(context,com.example.MyActivity.class);
OpenAppIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
OpenAppIntent.putExtra(Constants.BROADCAST_RECEIVER_BUNDLE , args);
context.startActivity(OpenAppIntent);
Uri alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
if (alarmUri == null) {
alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
}
Ringtone ringtone = RingtoneManager.getRingtone(context, alarmUri);
ringtone.play();
}
@Override
public void onReceive(Context context, Intent intent) {
Intent notificationIntent = new Intent(context, MyActivity.class);
Bundle bundle = new Bundle();
bundle.putSerializable(Constants.ALARM_OBJECT , alarms);
notificationIntent.putExtra(Constants.BROADCAST_RECEIVER_BUNDLE , bundle);
PendingIntent pendingIntent = PendingIntent.getActivity(context,
0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
.setContentTitle(Constants.APP_NAME)
.setContentText("Stop the alarm")
.setSmallIcon(R.drawable.logo_inner)
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setFullScreenIntent(pendingIntent, true)
.build();
Service.startForeground(1, notification); // Non-static method startForeground(int, notification) cannot be referenced from a static context
}
@Override
public void onReceive(Context context, Intent intent) {
Intent alarmServiceIntent = new Intent(context, AlarmSoundService.class);
Bundle alarmServiceBundle = new Bundle();
alarmServiceBundle.putSerializable(Constants.ALARM_OBJECT , alarms );
alarmServiceIntent.putExtra(Constants.ALARM_BUNDLE , alarmServiceBundle);
// startService(alarmServiceIntent);
ContextCompat.startForegroundService(context, alarmServiceIntent);
}