我试图了解广播接收器如何在内部工作。
当我调用registerReceiver()
方法时,内部会发生什么?它是否在内部创建服务?
当我打电话时内部会发生什么sendBroadcast
?
如果我必须实现自己的BroadcastReceiver
类(不扩展 AndroidBroadcastReceiver
类),我该如何实现?
我做了很多研究,但我只发现了如何BroadcastReceiver
工作。我也查看了 Android 源代码以了解它是如何工作的,但它也没有帮助。
我试图了解广播接收器如何在内部工作。
当我调用registerReceiver()
方法时,内部会发生什么?它是否在内部创建服务?
当我打电话时内部会发生什么sendBroadcast
?
如果我必须实现自己的BroadcastReceiver
类(不扩展 AndroidBroadcastReceiver
类),我该如何实现?
我做了很多研究,但我只发现了如何BroadcastReceiver
工作。我也查看了 Android 源代码以了解它是如何工作的,但它也没有帮助。
我不是 Android 方面的专家......但其他方面的专家:P 哈哈开玩笑,我认为 BroadcastReceiver 就像一种(linux)crontab,看起来 Android 已经有某种软件(或内部服务)为此运行,当你使用它时......你用选定的过滤器和东西“编程”(到那个“服务”),这就是即使你的应用程序没有运行也会被调用的原因。或者也许我完全错了:) 但这就是我的看法。
您写道,您需要在BroadcastReceiver
不扩展 Android的情况下实现 a BroadcastReceiver
。这是不可能的。Android 框架处理所有广播Intent
s 的分派和传递到所有已将自己注册为这些Intent
s 的侦听器的组件。当某些应用程序调用sendBroadcast()
时,Android 会检查是否有任何BroadcastReceiver
s 已注册为侦听器,Intent
如果找到,它会实例化组件(如果尚未实例化),然后调用组件的onReceive()
方法。
如果您不扩展 Android BroadcastReceiver
,则无法将您的组件注册为侦听器,Android 将不会调用您的类onReceive()
。
注意:如果您需要更多帮助,请说明您真正想要做什么。
首先:
import android.content.BroadcastReceiver;
声明你的广播接收器:
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Stuff you want to do when it receives something
}
};
最后使用您希望广播读取的意图创建一个意图过滤器:
IntentFilter iF = new IntentFilter(); // Example with some music players
iF.addAction("com.android.music.metachanged");
iF.addAction("com.htc.music.metachanged");
iF.addAction("fm.last.android.metachanged");
iF.addAction("com.sec.android.app.music.metachanged");
iF.addAction("com.nullsoft.winamp.metachanged");
iF.addAction("com.amazon.mp3.metachanged");
iF.addAction("com.miui.player.metachanged");
iF.addAction("com.real.IMP.metachanged");
iF.addAction("com.sonyericsson.music.metachanged");
iF.addAction("com.rdio.android.metachanged");
iF.addAction("com.samsung.sec.android.MusicPlayer.metachanged");
iF.addAction("com.andrew.apollo.metachanged");
iF.addAction("com.spotify.mobile.android.metadatachanged");
iF.addAction("com.spotify.music.metadatachanged");
registerReceiver(mReceiver, iF); // At the end you call your receiver with your intent Filter
希望能帮助到你