Android Can';t从活动调用BroadcastReceiver
我是android新手,这里我有两个活动和一个广播接收器 我正在尝试从第一个活动到第二个活动调用BroadcastReceiver Manifest.xmlAndroid Can';t从活动调用BroadcastReceiver,android,broadcastreceiver,alarmmanager,Android,Broadcastreceiver,Alarmmanager,我是android新手,这里我有两个活动和一个广播接收器 我正在尝试从第一个活动到第二个活动调用BroadcastReceiver Manifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.aviz.www.reminder"> <uses-
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.aviz.www.reminder">
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".Activity_Classes.MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Activity_Classes.AlarmActivity"
android:screenOrientation="portrait" />
<activity
android:name=".Activity_Classes.CreateAlarm"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateAlwaysHidden" />
<activity android:name=".Activity_Classes.WakeUpScreen"></activity>
<receiver
android:name=".AlarmReceiver"
android:enabled="true" />
</application>
</manifest>
我正在尝试从wakeupscreen停止报警,因为我调用了AlarmActivity中的方法来取消当前挂起的内容
AlarmActivity.java
public void stopAlarm(Context context){
Intent intent = new Intent(context, AlarmReceiver.class);
intent.setAction("ALARM_OFF");
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,mAlarmId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
}
通过这个方法(意图),我想调用BroadcastReceiver来停止(当前PendingEvent)警报
AlarmReceiver.java
public class AlarmReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
MediaPlayer player = MediaPlayer.create(context, R.raw.alarmtone);
String alarmAction = intent.getAction();
if (alarmAction.equals("ALARM_ON")) {
Intent intent1 = new Intent(context, WakeUpScreen.class);
context.startActivity(intent1);
player.setLooping(true);
player.setVolume(100, 100);
player.start();
} else if (alarmAction.equals("ALARM_OFF")) {
player.stop();
player.release();
}
}
}
调试从WakeUpScreen.java调用的app stopAlarm(上下文上下文)方法时,调试器也跨越了stopAlarm()方法中的所有行,但未调用AlarmReceiver
有人能帮我解决这个问题吗。AFAIK AlarmManager.cancel仅用于取消现有的挂起任务。
并且在取消时不会执行待定的意图 在取消警报后,您必须手动发送带有“警报关闭”额外意图的广播
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("ALARM_ON");
intentFilter.addAction("ALARM_OFF");
LocalBroadcastManager.getInstance(this).registerReceiver(new AlarmReceiver(),
intentFilter);
mStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
alarmActivity.stopAlarm(getBaseContext());
Intent intent = new Intent("ALARM_OFF");
intent.setClass(WakeUpScreen.this, AlarmReceiver.class);
LocalBroadcastManager.getInstance(WakeUpScreen.this).sendBroadcast(intent);
}
});
你能编辑我的代码并让它工作吗,“在你的情况下,在取消警报后,你必须手动发送带有“警报关闭”额外意图的广播。”我无法理解这些@MAN寻找你的回复@ManIt很好。你可以在警报上定义你的行动,清单中的报警关闭。但在注册时我已经处理好了。你试过调试吗?它进入接收器了吗?没有进入接收器,但它越过了wakeupscreen@ManCheck我的更新答案中的所有线。报警打开和报警关闭是为了你的意图而采取的行动或额外行动?这些行动@ManThen你打算怎么做(“行动”,“警报关闭”),这只是额外的。请您从清单和接收者的onReceive方法发布您的接收者部分。我将在5分钟内更新所有代码@Man
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("ALARM_ON");
intentFilter.addAction("ALARM_OFF");
LocalBroadcastManager.getInstance(this).registerReceiver(new AlarmReceiver(),
intentFilter);
mStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
alarmActivity.stopAlarm(getBaseContext());
Intent intent = new Intent("ALARM_OFF");
intent.setClass(WakeUpScreen.this, AlarmReceiver.class);
LocalBroadcastManager.getInstance(WakeUpScreen.this).sendBroadcast(intent);
}
});