Android Can';t从活动调用BroadcastReceiver

Android 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-

我是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-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);

            }
        });