[英]onReceive method of BroadcastReceiver does not get called
我正在使用AlarmManager通过播放声音来创建警报。 为此,我首先创建一个PendingIntent ,为此必须创建一个名为AlarmReceiver的类,该类扩展了BroadcastReceiver 。 在这个新类中,我重写了onReceive方法,在该方法中,我还开始播放声音。 但是,从我的测试来看,MainActivity甚至没有调用onReceive方法。
经过研究,我发现应该在清单文件中声明接收方。 因此,我声明了它,但它无法识别类的名称AlarmReceiver ,它以红色显示。 我不完全了解如何在清单文件中正确声明。 我知道还有其他类似的问题,我已经检查了所有问题,但仍然无法解决。
MainActivity的代码是:
package com.example.alarmsound;
public class MainActivity extends AppCompatActivity {
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
final MediaPlayer mp = MediaPlayer.create(context, R.raw.music);
Log.d("Music", "It went here.");
mp.start();
Button stop = (Button) findViewById(R.id.stopAlarm);
stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mp.stop();
}
});
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.content_main);
Calendar t = Calendar.getInstance();
t.add(Calendar.SECOND, 5);
Context context = this;
AlarmManager alarmMgr;
alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmMgr.set(AlarmManager.RTC_WAKEUP, t.getTimeInMillis(), pendingIntent);
}
}
清单中的声明是:
<receiver android:name="com.example.alarmsound.AlarmReceiver">
<intent-filter>
<action android:name="com.example.alarmsound.MainActivity" />
</intent-filter>
</receiver>
即使我认为自己正在做的所有事情,我在MainActivity中也可能做错了什么。 我将不胜感激任何帮助。
将接收者声明的第一行更改为: <receiver android:name="com.example.alarmsound.MainActivity$AlarmReceiver">
。 那应该让Android通过清单检测到您的类。
$
符号用于引用Android Manifest中的内部类。
好的。 因此,正如您提到的, AndroidManifest.xml
无法识别AlarmReceiver
类。 因此,我在Android Studio中进行了尝试,看起来格式应该是这样的:
<receiver android:name=".MainActivity$AlarmReceiver">
<intent-filter>
<action android:name="com.example.alarmsound.MainActivity" />
</intent-filter>
</receiver>
尝试运行代码,但在应用崩溃时返回错误。 无论如何,我认为现在是另外一个问题。 祝好运。 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.