Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 仅当internet连接可用时才允许开关切换_Java_Android_Android Switch - Fatal编程技术网

Java 仅当internet连接可用时才允许开关切换

Java 仅当internet连接可用时才允许开关切换,java,android,android-switch,Java,Android,Android Switch,我在android代码中使用了一个开关。 如果internet服务可用,则仅允许切换或显示toast消息。我如何做到这一点? 我无法使用 switch.setOnCheckedChangeListener() 只有我按两次开关按钮,支票才能生效 aSwitch.setEnabled(false); 仅在我单击一次后才起作用首先创建带有标志的布尔值: boolean checkInternetFlag = false; 然后创建一个检查internet是否可用的方法,例如: public f

我在android代码中使用了一个开关。 如果internet服务可用,则仅允许切换或显示toast消息。我如何做到这一点? 我无法使用

switch.setOnCheckedChangeListener()

只有我按两次开关按钮,支票才能生效

aSwitch.setEnabled(false); 

仅在我单击一次后才起作用首先创建带有标志的布尔值:

boolean checkInternetFlag = false;
然后创建一个检查internet是否可用的方法,例如:

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" />
您还可以禁用切换开关,如下所示:

aSwitch.setEnabled(false);
要使开关不可点击,请使用:

aSwitch.setClickable(false);

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

boolean checkInternetFlag = false;
然后创建一个检查internet是否可用的方法,例如:

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" />
您还可以禁用切换开关,如下所示:

aSwitch.setEnabled(false);
要使开关不可点击,请使用:

aSwitch.setClickable(false);

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

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

  IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
  NetworkChangeReceiver receiver = new NetworkChangeReceiver();
  registerReceiver(receiver, filter);
 @Override
 protected void onDestroy() {
  Log.v(LOG_TAG, "onDestory");
  super.onDestroy();

  unregisterReceiver(receiver);

 }
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;
        }
    }
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
2)添加OnDestroy()方法:

  IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
  NetworkChangeReceiver receiver = new NetworkChangeReceiver();
  registerReceiver(receiver, filter);
 @Override
 protected void onDestroy() {
  Log.v(LOG_TAG, "onDestory");
  super.onDestroy();

  unregisterReceiver(receiver);

 }
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;
        }
    }
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
3)将以下代码添加到您的活动中:

  IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
  NetworkChangeReceiver receiver = new NetworkChangeReceiver();
  registerReceiver(receiver, filter);
 @Override
 protected void onDestroy() {
  Log.v(LOG_TAG, "onDestory");
  super.onDestroy();

  unregisterReceiver(receiver);

 }
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;
        }
    }
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
公共类NetworkChangeReceiver扩展了BroadcastReceiver
{
@凌驾
公共void onReceive(最终上下文、最终意图)
{
Log.v(Log_标签,“已收到有关网络状态的通知”);
isNetworkAvailable(上下文);
}
专用布尔值isNetworkAvailable(上下文)
{
ConnectionManager连接=(ConnectionManager)
getSystemService(context.CONNECTIVITY\u服务);
if(连接性!=null)
{
NetworkInfo[]info=connectivity.getAllNetworkInfo();
如果(信息!=null)
{
对于(int i=0;i
4)在清单文件中添加此权限:

  IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
  NetworkChangeReceiver receiver = new NetworkChangeReceiver();
  registerReceiver(receiver, filter);
 @Override
 protected void onDestroy() {
  Log.v(LOG_TAG, "onDestory");
  super.onDestroy();

  unregisterReceiver(receiver);

 }
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;
        }
    }
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />


希望这与您的需求相关。

如果networkstate发生更改,则以下方法将适用:

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

  IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
  NetworkChangeReceiver receiver = new NetworkChangeReceiver();
  registerReceiver(receiver, filter);
 @Override
 protected void onDestroy() {
  Log.v(LOG_TAG, "onDestory");
  super.onDestroy();

  unregisterReceiver(receiver);

 }
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;
        }
    }
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
2)添加OnDestroy()方法:

  IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
  NetworkChangeReceiver receiver = new NetworkChangeReceiver();
  registerReceiver(receiver, filter);
 @Override
 protected void onDestroy() {
  Log.v(LOG_TAG, "onDestory");
  super.onDestroy();

  unregisterReceiver(receiver);

 }
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;
        }
    }
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
3)将以下代码添加到您的活动中:

  IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
  NetworkChangeReceiver receiver = new NetworkChangeReceiver();
  registerReceiver(receiver, filter);
 @Override
 protected void onDestroy() {
  Log.v(LOG_TAG, "onDestory");
  super.onDestroy();

  unregisterReceiver(receiver);

 }
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;
        }
    }
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
公共类NetworkChangeReceiver扩展了BroadcastReceiver
{
@凌驾
公共void onReceive(最终上下文、最终意图)
{
Log.v(Log_标签,“已收到有关网络状态的通知”);
isNetworkAvailable(上下文);
}
专用布尔值isNetworkAvailable(上下文)
{
ConnectionManager连接=(ConnectionManager)
getSystemService(context.CONNECTIVITY\u服务);
if(连接性!=null)
{
NetworkInfo[]info=connectivity.getAllNetworkInfo();
如果(信息!=null)
{
对于(int i=0;i
4)在清单文件中添加此权限:

  IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
  NetworkChangeReceiver receiver = new NetworkChangeReceiver();
  registerReceiver(receiver, filter);
 @Override
 protected void onDestroy() {
  Log.v(LOG_TAG, "onDestory");
  super.onDestroy();

  unregisterReceiver(receiver);

 }
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;
        }
    }
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />


希望这与您的要求有关。

何时根据您的要求显示祝酒辞?如果有互联网连接,切换开关,如果没有internet,则会显示toast消息,切换开关不应工作。何时会根据您的要求显示toast?如果有internet连接,切换开关,如果没有internet,则会显示toast消息,切换开关不应工作。是,我已完成检查,但切换开关仍处于活动状态是,我已完成检查,但切换开关仍处于活动状态,如果我使用switch.setEnabled(false);,当恢复internet连接时,它不工作,因为我正在导航抽屉的适配器中使用此代码。谢谢您的帮助。然后您必须使用BroadcastReceiver来侦听网络状态更改,然后触发代码。我已编辑了我的答案,如果没有解决,您可以查看此答案。如果我使用aSwitch.setEnabled(false);,当恢复internet连接时,它不工作,因为我正在导航抽屉的适配器中使用此代码。谢谢你的帮助。然后你必须使用BroadcastReceiver来监听网络状态的变化,然后触发你的代码。我已经编辑了我的答案,如果没有解决,你可以看看这个答案。