0

デバイスにwifiまたは3g接続があるかどうかを検出しようとしています。接続がある場合はMapView、が表示されますが、2つがどちらも接続されていない場合、条件ステートメントに問題があります。

ネットワーク接続を確認する方法は次のとおりです。

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;
}

これが私がメソッドを呼び出すコードです。インターネットにアクセスできる場合は表示されますが、MapViewインターネットにアクセスできない場合はトーストは表示されません。

if (haveNetworkConnection()) {
    if (loc != null && !loc.equals("")) {
        new GeocoderTask().execute(loc);
    } else {
        Toast.makeText(this, "Internet Connection is Required to view this map", Toast.LENGTH_LONG).show();
    }
}
4

4 に答える 4

0

これを試して、インターネット接続が利用可能かどうかを確認してください。

private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager 
        = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();

    return activeNetworkInfo != null;
}
于 2012-12-01T18:17:18.220 に答える
0

ループが正しい値を返すと仮定して、ローカルブール値は不要なので取り出しましょう。

private boolean haveNetworkConnection() {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo[] netInfo = cm.getAllNetworkInfo();
    for (NetworkInfo ni : netInfo) {
        if (ni.getTypeName().equalsIgnoreCase("WIFI") && ni.isConnected())
            return true;
        if (ni.getTypeName().equalsIgnoreCase("MOBILE") && ni.isConnected())
            return true;
    }
    return false;
}

ループが正しくない場合は、ドキュメントのメソッドをコードに組み込むことができます。

private boolean haveNetworkConnection() {
    ConnectivityManager cm =
            (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    if(activeNetwork != null)
        return activeNetwork.isConnectedOrConnecting();
    return false;
}
于 2012-12-01T18:17:29.857 に答える
0
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())
                return true;
        if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
            if (ni.isConnected())
                return true;
    }
    return false;
}
于 2012-12-01T18:21:41.913 に答える
0

あなたの論理は次のように間違っています:

if (haveNetworkConnection()) {
        if (loc != null && !loc.equals("")) {
            new GeocoderTask().execute(loc);
        } else {
            Toast.makeText(this, "Internet Connection is Required to view this map", Toast.LENGTH_LONG).show();
        }
    }

haveNetworkConnection()がfalseの場合、トーストに到達することはありません。次のように変更する必要があります。

if (haveNetworkConnection()) {
            if (loc != null && !loc.equals("")) {
                new GeocoderTask().execute(loc);
            } 
        }
else {
                Toast.makeText(this, "Internet Connection is Required to view this map", Toast.LENGTH_LONG).show();
            }
于 2012-12-01T18:37:13.730 に答える