You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将ExampleBroadcastReceiver代码合并至MainActivity类实现二合一?

能否将BroadcastReceiver类合并到MainActivity中?

当然可以!你完全可以把ExampleBroadcastReceiver作为MainActivity的私有内部类来实现代码合并,这样两个类的逻辑就能放在同一个文件里,同时功能和原来完全一致。

以下是合并后的完整代码:

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.os.Bundle;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    // 声明内部类的实例
    private ExampleBroadcastReceiver exampleBroadcastReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 初始化内部类实例
        exampleBroadcastReceiver = new ExampleBroadcastReceiver();
    }

    @Override
    protected void onStart() {
        super.onStart();
        IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
        registerReceiver(exampleBroadcastReceiver, filter);
    }

    @Override
    protected void onStop() {
        super.onStop();
        unregisterReceiver(exampleBroadcastReceiver);
    }

    // 把ExampleBroadcastReceiver改为MainActivity的私有内部类
    private class ExampleBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {
                boolean noConnectivity = intent.getBooleanExtra(
                        ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
                if (noConnectivity) {
                    Toast.makeText(context, "Disconnected", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(context, "Connected", Toast.LENGTH_SHORT).show();
                }
            }
        }
    }
}

关键说明:

  • 将广播接收器设为private内部类,确保它只能被MainActivity内部访问,符合封装原则
  • 内部类可以直接调用外部类的成员(如果有需要),这里我们保留了原有的网络状态监听逻辑
  • 注册、注销广播接收器的逻辑和原来完全一致,只是操作的对象变为内部类的实例

内容的提问来源于stack exchange,提问作者Husky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 22:02:30