【问题标题】:ask user to connect to internet or quit app (android)要求用户连接到互联网或退出应用程序 (android)
【发布时间】:2014-09-05 12:18:28
【问题描述】:

我正在开发一个图片库应用程序,该应用程序正在从互联网检索图像。

所以我想提示一个对话框要求用户连接到互联网或退出应用程序。

向用户显示 WiFi 和运营商网络选项。

【问题讨论】:

  • 很简单,只需检查是否有活动的网络连接。如果不是,则显示一个是|否对话框。如果是肯定的,则显示网络设置。否则,完成活动。

标签: android android-internet


【解决方案1】:

这会检查 wifi 和移动数据。在启动画面或主要活动上运行 tis 代码以检查网络连接。如果网络未连接,则弹出对话框并完成活动。就这么简单

private boolean haveNetworkConnection() {
    boolean haveConnectedWifi = false;
    boolean haveConnectedMobile = false;

    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo[] netInfo = cm.getAllNetworkInfo();
    for (NetworkInfo ni : netInfo) {
        if (ni.getTypeName().equalsIgnoreCase("WIFI"))
            if (ni.isConnected())
                haveConnectedWifi = true;
        if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
            if (ni.isConnected())
                haveConnectedMobile = true;
    }
    return haveConnectedWifi || haveConnectedMobile;
}

【讨论】:

  • 如果我想检查每个片段中的互联网连接(换句话说,在每个 UI 页面中)。假设首先我单击图像并看到大图像,但现在如果互联网连接丢失,我应该通知用户。在哪里放置此代码,以便我检查所有屏幕中的互联网连接?
  • 创建一个通用的 util 类并从那里访问它。此外,您还可以创建广播并随时随地收听网络变化。
【解决方案2】:

试试这个:

public static boolean isConnected(Context context){
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo wifiInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
NetworkInfo mobileInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

if ((wifiInfo != null && wifiInfo.isConnected()) || (mobileInfo != null && mobileInfo.isConnected())) {
        return true;
}else{
        showDialog();
         return false;
}

private void showDialog()
{
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("Connect to wifi or quit")
        .setCancelable(false)
        .setPositiveButton("Connect to WIFI", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
                startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
           }
         })
        .setNegativeButton("Quit", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
                this.finish();
           }
        });
         AlertDialog alert = builder.create();
         alert.show();
}

【讨论】:

  • 非常抱歉,但我的代码还会根据场景检查是否需要任何互联网连接。
【解决方案3】:

首先您应该检查它们是否已经连接(大量示例如何在线执行此操作)

如果没有,则使用此代码

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Connect to wifi or quit")
.setCancelable(false)
.setPositiveButton("Connect to WIFI", new DialogInterface.OnClickListener() {
   public void onClick(DialogInterface dialog, int id) {
        startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
   }
 })
.setNegativeButton("Quit", new DialogInterface.OnClickListener() {
   public void onClick(DialogInterface dialog, int id) {
        this.finish();
   }
});
 AlertDialog alert = builder.create();
 alert.show();

【讨论】:

  • 如果您的互联网已经连接,那么您能做什么
【解决方案4】:
//Checking For Internet Connection
ConnectionDetector cd = new ConnectionDetector(getApplicationContext()); 

    // Check if Internet present
    if (!cd.isConnectingToInternet()) {
        // Internet Connection is not present
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("Connect to wifi or quit")
       .setCancelable(false)
       .setPositiveButton("Connect to WIFI", new DialogInterface.OnClickListener() {

               public void onClick(DialogInterface dialog, int id) {
                   startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
               }
        })
      .setNegativeButton("Quit", new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
               this.finish();
         }
      });
      AlertDialog alert = builder.create();
      alert.show();

    return;
    }

【讨论】:

  • @Adnanhaider 它不会进入方法,而只是传递函数。
  • @Pragnest Ghoda 我复制你的代码并粘贴它在连接检测器上显示错误
  • @Adnanhaider 1. 首先确保您具有清单中提到的 access_network_state 权限。 2. 创建一个返回 true/false 的方法并将此方法粘贴到其中。 (如果有连接则返回 true 或 false) 3. 根据结果确保继续流程。
  • @Adnanhaider 请注意。连接到 WiFi 并不意味着您已连接到互联网。如果您连接到 wifi,即使 wifi 没有互联网,它也会返回 true。
  • 我遵循了所有这些步骤,但没有成功
【解决方案5】:

这就是它的完成方式。

此类检查有效的互联网连接:

public class ConnectionStatus {

    private Context _context;

    public ConnectionStatus(Context context) {
        this._context = context;
    }

    public boolean isConnectionAvailable() {
        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) {
                        return true;
                    }
        }
        return false;
    }
}

如果没有有效的互联网连接,以下方法会打开 wi-fi 面板:

public void addListenerOnWifiButton() {
        Button btnWifi = (Button)findViewById(R.id.btnWifi);

        iia = new ConnectionStatus(getApplicationContext());

        isConnected = iia.isConnectionAvailable();
        if (!isConnected) {
            btnWifi.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
                    Toast.makeText(getBaseContext(), "Please connect to a hotspot",
                            Toast.LENGTH_SHORT).show();
                }
            });
        }
        else {
            btnWifi.setVisibility(4);
            warning.setText("This app may use your mobile data to update events and get their details.");
        }
    }

如果没有有效的互联网连接,以下方法会打开 3G 面板:

public void addListenerOn3GButton() {
    Button btnThreeGee = (Button)findViewById(R.id.btn3G);
    iia = new ConnectionStatus(getApplicationContext());

    isConnected = iia.isConnectionAvailable();
    if (!isConnected) {
        btnThreeGee.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            startActivity(new Intent(Settings.ACTION_DATA_ROAMING_SETTINGS));
            Toast.makeText(getBaseContext(), "Please check 'Data enabled' option",
                    Toast.LENGTH_SHORT).show();
        }
    });
    }
    else {

         btnThreeGee.setVisibility(4);
         cont.setVisibility(View.VISIBLE);
         warning.setText("This app may use your mobile data to update events and get their details.");
        }
}

希望这会有所帮助:)

【讨论】:

  • 嘿伙计,您知道如何将数据漫游设置提示打开为类似于蓝牙/GPS 提示的对话框类型启用/禁用吗?您的回答很好,但它会打开一个新活动,而不仅仅是一个影响用户体验的小对话框。
  • 我认为this的回答会帮助你实现你所需要的。
  • 我的意思是会出现一个对话框,然后单击确定/是/等将自动打开移动数据。类似于通过对话框提示您打开蓝牙的方式,如果单击“是”,您的蓝牙将自动打开。或者打开谷歌地图如何显示“允许此应用使用您的位置?”并单击是将启用您的位置设置。不点击是并显示一个新的活动。
  • 我不确定 Google 是否真的允许这样做,作为一项安全功能。 Mountain View 的开发人员担心,“轻松”打开数据可能会被错误地完成,并对用户产生不必要的关税。因此,他们确保将用户带到不同的屏幕以打开数据。开启 3G 后,您始终可以使用返回按钮返回应用。
猜你喜欢
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-25
相关资源
最近更新 更多