当前位置: 首页 > 知识库问答 >
问题:

从静态BroadcastReceiver更新UI

郎聪
2023-03-14

我已经检查了如何处理网络连接更改的示例:Android 检查互联网连接,并找到了一段非常好的代码来处理此更改:

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>

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

我可以使NetworkChangeReceiver类成为内部静态或外部。但我需要的是我可以从公共无效接收中使用我的主活动 UI。我该怎么做?

共有1个答案

俞新翰
2023-03-14

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

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" />
 类似资料:
  • 我有一个私有int数组,我需要以某种方式找到长度,但在静态类下无法做到这一点。我必须保持类的静态,是否可以添加其他方法来将a.length更改为其他方法? 该问题是由a.length引起的。

  • Android清单的重要部分是: 为什么我的广播接收器没有收到意图?

  • 当我试图从java向Mongo DB插入记录时,我无法更新静态字段。 在这个过程之后,我无法在数据库中看到地址字段。我知道静电场有问题,但我很困惑

  • 问题内容: 在MainActivity中,我有一个TextView:textV1。我在MainActivity中也有一个更新该textview的方法: 在BroadcasrReceiver中,我需要在MainActivity中更新textV1中的文本。 如何才能做到这一点?BroadcastReceiver从服务运行。我无法更改此代码。我可以从onReceive()访问和更改MainActivit

  • 问题内容: 我正在将PHP 5.3库转换为可在PHP 5.2上使用。阻碍我前进的主要因素是使用后期静态绑定,例如,如果将其转换为,将会得到相同的结果吗? 和之间有什么区别? 问题答案: 我会得到相同的结果吗? 并不是的。不过,我不知道针对PHP 5.2的解决方法。 和之间有什么区别? 指的是实际写入关键字的同一类。 在PHP 5.3的最新静态绑定中,指的是您在层次结构中调用方法的任何类。 在以下示

  • 本文向大家介绍深入Android中BroadcastReceiver的两种注册方式(静态和动态)详解,包括了深入Android中BroadcastReceiver的两种注册方式(静态和动态)详解的使用技巧和注意事项,需要的朋友参考一下 今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式。 BroadcastReceiver也就是“广播接收者”的意思,顾名

  • 说明 支付宝境外到店支付-更新商户二维码状态 官方文档:https://global.alipay.com/service/merchant_QR_Code/34 类 请求参数类 请求参数 类名:\Yurun\PaySDK\AlipayCrossBorder\InStore\ModifyStatus\Request 属性 名称 类型 说明 $service string 接口名称 $timesta

  • 我与Wildfly上部署的webapp中的一些静态文件(主要是图像)发生了冲突。有时应用程序需要更新其中的一些文件,然后在文件系统中替换这些文件。 这显然是缓存的问题,因为如果我删除以前请求的文件之一并再次请求它,我将得到和StackTrace!