繁体   English   中英

如何从清单中注册广播接收器?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM