我想创建一个没有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"));
}
答案 0 :(得分:3)
我想创建一个没有UI的后台应用。
这不切实际。
但是当我运行应用程序时,广播接收器永远不会被注册。当我从测试活动注册我的接收器时,它工作正常。为什么会发生这种情况?
Manifest-registered接收器在安装时不起作用。它们仅在某些内容使用明确的Intent
启动某个应用程序组件之后才能工作。对于99.9%的应用程序,这是他们的主屏幕启动器活动。
答案 1 :(得分:0)
我用以下清单条目写了一个最小的应用程序:
<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中有太多额外的东西?