[英]How to register broadcast receiver from Manifest?
我想创建一个没有UI的后台应用程序。 因此,我有一个广播接收器,我正在尝试从清单中进行注册。 这是我在清单中所做的:
<receiver
android:name="background.broadcastReceivers.GPSStartedReceiver">
<intent-filter android:priority="100">
<action
android:name="android.location.PROVIDERS_CHANGED"
android:enabled="true"/>
</intent-filter>
</receiver>
但是,当我运行该应用程序时,广播接收器从未被注册。 当我通过测试活动注册接收器时,它可以正常工作。 为什么会这样呢?
这是我在测试活动中正在做的事情:
private GPSStartedReceiver receiver = new GPSStartedReceiver();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Register a broadcast receiver which listens to GPS provider changes
this.registerReceiver(receiver,
new IntentFilter("android.location.PROVIDERS_CHANGED"));
}
我想创建一个没有UI的后台应用程序。
那是不切实际的。
但是,当我运行该应用程序时,广播接收器从未被注册。 当我通过测试活动注册接收器时,它可以正常工作。 为什么会这样呢?
清单注册的接收器在安装时不起作用。 只有在某些东西使用明确的Intent
启动应用程序的组件之一后,它们才起作用。 对于99.9%的应用程序,这是其主屏幕启动器活动。
我用以下清单条目编写了一个最小的应用程序:
<receiver android:name="test.Receiver">
<intent-filter>
<action android:name="android.location.PROVIDERS_CHANGED"/>
</intent-filter>
</receiver>
和test.Receiver类:
package test;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class Receiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("@@@", "here");
}
}
当我在设备上切换GPS时,会打印我的日志消息。 也许清单XML中包含太多额外的内容?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.