【问题标题】:Update UI from static BroadcastReceiver从静态 BroadcastReceiver 更新 UI
【发布时间】:2016-08-10 14:49:29
【问题描述】:

我查看了这个如何处理网络连接更改的示例: Android Check Internet Connection 并找到了一段非常好的代码来处理这些变化:

public class NetworkChangeReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(final Context context, final Intent intent) {

        String status = NetworkUtil.getConnectivityStatusString(context); //some internal class to determinate which type is connected

        Toast.makeText(context, status, Toast.LENGTH_LONG).show();
    }
}

为了让这个东西工作,我需要在我的清单文件中声明这个 BroadcastReceiver:

<application  ...>
     ...
        <receiver
            android:name="net.viralpatel.network.NetworkChangeReceiver"
            android:label="NetworkChangeReceiver" >
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
                <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
            </intent-filter>
        </receiver>
      ...
</application>

现在我想在连接 wifi/移动数据时更新 UI。

我可以将NetworkChangeReceiver 类设为内部静态或外部。但我需要的是我可以使用来自public void onReceiveMainActivity UI。我该怎么做?

【问题讨论】:

标签: android


【解决方案1】:

答案很简单。我无需注册我的广播即可获得有关连接更改的广播:

private BroadcastReceiver networkConnectivityReciever = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            NetworkInfo currentNetworkInfo = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
            if (dialog != null) {
                if(currentNetworkInfo.isConnected()){
                    dialog.dismiss();
                    webView.reload();
                }else{
                    dialog.show(((MainActivity) context).getSupportFragmentManager(), "");
                }
            }
        }
    };

@Override
    protected void onResume() {
        super.onResume();
        registerReceiver(networkConnectivityReciever,
                new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
    }

    @Override
    protected void onPause() {
        super.onPause();
        unregisterReceiver(networkConnectivityReciever);
    }

我在清单中唯一需要的是:

<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

【讨论】:

    猜你喜欢
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多