如何访问清单中声明的​​广播接收器并更改某些属性

时间:2015-07-31 15:43:57

标签: android android-intent broadcastreceiver intentfilter

我在AndroidManifest.xml中声明了一个接收器:

    <receiver android:name=".receivers.ConnectionUpdateReceiver">
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
        </intent-filter>
    </receiver>



public class ConnectionUpdateReceiver extends BroadcastReceiver {
    private Listener listener;

    public void setListener(Listener listener) {
        this.listener = listener;
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        final NetworkInfo networkInfo = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        if (networkInfo != null && networkInfo.isConnected()) {
            if (listener != null) {
                listener.onWifiConnected(networkInfo);
            }
        }
    }

    public interface Listener {
        void onWifiConnected(NetworkInfo networkInfo);
    }
}

我必须为这个类注册一个监听器。但我不知道如何在我的Activity类中访问它来设置listener属性。

我试图在运行时以通常的方式在我的活动的onResume中注册这个接收器:

registerReceiver(connectionUpdateReceiver, new IntentFilter(...));

但我不知道要传递给IntenetFilter构造函数,因为

android.net.conn.CONNECTIVITY_CHANGE 

无法访问。

2 个答案:

答案 0 :(得分:2)

  

我必须为这个类注册一个监听器

这是不可能的,因为在Android发送和处理匹配的广播之前,没有清单注册BroadcastReceiver的实例。

  

我试图在运行时以通常的方式在我的活动的onResume中注册这个接收器:

只有摆脱清单条目才会有意义。

  

但是我不知道要传递给IntenetFilter构造函数的内容,因为那里无法访问android.net.conn.CONNECTIVITY_CHANGE

欢迎您将"android.net.conn.CONNECTIVITY_CHANGE"传递给IntentFilter构造函数。它也可以ConnectivityManager.CONNECTIVITY_ACTION

答案 1 :(得分:1)

要侦听网络更改事件,您的活动必须注册侦听CONNECTIVITY_CHANGE的广播接收器:

例如:

public void onCreate(Bundle savedInstanceState) {

    registerReceiver(new BroadcastReceiver() {  

        public void onReceive(Context context, Intent intent) {

            Log.i(TAG, "Hey, net?");
        }}, new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"));
}

我希望能够支持你的问题。