当前位置: 代码迷 >> Android >> 仅当互联网连接可用时才允许切换开关
  详细解决方案

仅当互联网连接可用时才允许切换开关

热度:63   发布时间:2023-08-04 10:56:51.0

我在Android代码中使用了一个开关。 如果可以使用互联网服务,则仅允许切换,否则显示敬酒消息。 我该如何实现? 我无法使用

switch.setOnCheckedChangeListener()

仅当我按下切换按钮两次时,检查才有效。

aSwitch.setEnabled(false); 

仅在单击一次后有效

首先创建一个带有标志的布尔值:

boolean checkInternetFlag = false;

然后创建一个方法来检查互联网是否可用,例如:

public final boolean isInternetOn() {
  ConnectivityManager connectivityManager 
        = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
  NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
  return activeNetworkInfo != null && activeNetworkInfo.isConnected();
    }

您还需要在清单中添加此权限:

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

然后,您可以在这样的条件下执行所需的操作:

        checkInternetFlag = isInternetOn();
    if (!checkInternetFlag) {
        Toast.makeText(getActivity(), "Internet not available", Toast.LENGTH_LONG).show();
    }

您也可以像这样禁用切换开关:

aSwitch.setEnabled(false);

并使开关不可点击使用:

aSwitch.setClickable(false);

如果networkstate发生更改,以下方法将捕获:

1)将此代码添加到onCreate()中:

  IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
  NetworkChangeReceiver receiver = new NetworkChangeReceiver();
  registerReceiver(receiver, filter);

2)添加OnDestroy()方法:

 @Override
 protected void onDestroy() {
  Log.v(LOG_TAG, "onDestory");
  super.onDestroy();

  unregisterReceiver(receiver);

 }

3)在您的活动中添加以下代码:

public class NetworkChangeReceiver extends BroadcastReceiver
    {

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

        Log.v(LOG_TAG, "Receieved notification about network status");
        isNetworkAvailable(context);

    }


    private boolean isNetworkAvailable(Context context)
    {
        ConnectivityManager connectivity = (ConnectivityManager)
                                           context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivity != null)
        {
            NetworkInfo[] info = connectivity.getAllNetworkInfo();
            if (info != null)
            {
                for (int i = 0; i < info.length; i++)
                {
                    if (info[i].getState() == NetworkInfo.State.CONNECTED)
                    {
                        if(!isConnected)
                        {
                            Log.v(LOG_TAG, "Now you are connected to Internet!");
                            aSwitch.setEnabled(true);
                            isConnected = true;
                        }
                        return true;
                    }
                }
            }
        }
        Toast.makeText(YourActivity.this, "Internet is not available", Toast.LENGTH_SHORT).show();
        aSwitch.setEnabled(false);
        isConnected = false;
        return false;
        }
    }

4)在清单文件中添加此权限:

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

希望这与您的要求有关。

  相关解决方案