android - 没有互联网连接时禁用按钮

标签 android

我的代码是这样的:

    mediaPlayer = new MediaPlayer();
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

    new PlayerTask().execute(stream);

    b_play.setOnClickListener(new View.OnClickListener() {

     @Override
     public void onClick(View view) {
         if (started) {
             started = false;
             mediaPlayer.pause();
             b_play.setText(R.string.start);
         } else {
             started = true;
             mediaPlayer.start();
             b_play.setText(R.string.pause);

         }
     }
});

如何在没有互联网连接时禁用 b_play 按钮?

最佳答案

如果你想持续检查是否有互联网连接,并基于此禁用/启用按钮。使用以下解决方案:

首先创建扩展 BroadcastReceiver 的 Receiver 类(我们将其命名为 NetworkStateReceiver)。 NetworkStateReceiver 根据互联网的可用性调用接口(interface)的不同方法:

public class NetworkStateReceiver extends BroadcastReceiver {

public interface NetworkListener {
    void onNetworkAvailable();
    void onNetworkUnavailable();
}

private NetworkListener networkListener;

public NetworkStateReceiver(NetworkListener networkListener) {
    this.networkListener = networkListener;
}

public void onReceive(Context context, Intent intent) {
    if (intent.getExtras() != null) {
        NetworkInfo ni = (NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO);
        if (ni != null && ni.getState() == NetworkInfo.State.CONNECTED) {
         Log.i("app", "Network " + ni.getTypeName() + " connected");
            networkListener.onNetworkAvailable();
        }
    }
    if (intent.getExtras().getBoolean(ConnectivityManager.EXTRA_NO_CONNECTIVITY, Boolean.FALSE)) {
       Log.d("app", "There's no network connectivity");
        networkListener.onNetworkUnavailable();
    }
  }
}

然后创建实现 NetworkStateReceiver.NetworkListener 接口(interface)的 NetworkStateReceiver 类的实例:

NetworkStateReceiver networkStateReceiver = new NetworkStateReceiver(new NetworkStateReceiver.NetworkListener() {
        @Override
        public void onNetworkAvailable() {
            b_play.setEnabled(true); 
        }

        @Override
        public void onNetworkUnavailable() {
            b_play.setEnabled(false); 
        }
    });

创建 NetworkStateReceiver 的实例后,像这样注册它:

registerReceiver(networkStateReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));

并且不要忘记在 onDestroy() 方法中注销它:

public void onDestroy() {
    super.onDestroy();
    unregisterReceiver(networkStateReceiver);
}

关于android - 没有互联网连接时禁用按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39942196/

相关文章:

javascript - 在 Android 浏览器中将图像渲染为数据流

android - 在当前日期时间之后设置 Datepicker minDate 会添加一个在 DatePickerDialog 顶部显示今天的文本

android - 如何在 Android 的 JSON 中包含层次结构?

android - 提高 AChartEngine TimeSeries 性能?

android - 如何使用闹钟类设置闹钟

android - 将用 Java 制作的简单安卓游戏转换为 Facebook

android - 在 flutter 上显示运行时钟

android - Android Studio 中的 Firebase 和 GTM

android - React Native WebView,如何存储用户名和密码

java - SharedPreference 不包含广播接收器内的任何内容