16

私は Android 開発に不慣れで、Wifi、EDGE、または 3G のいずれかを介して電話をインターネットに接続する必要がある Android アプリケーションに取り組んでいます。

これは、インターネット接続が利用可能かどうかを確認するために使用しているコードです

public static boolean isConnected()
{
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    return cm.getActiveNetworkInfo().isConnectedOrConnecting();
}

これらの権限もマニフェスト ファイルに設定しました

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

これは、Android のバージョン 1.5 を実行しているエミュレータで 3G が有効になっている場合は問題なく動作しますが、3G 接続を無効にするとクラッシュします。isConnectedOrConnecting() を呼び出すと、アプリケーションが null ポインター例外をスローします。Android 2.1 を実行している HTC Desire でも同じことが起こります。

誰もがこれに対する解決策を知っていることを願っています。

前もって感謝します!

4

5 に答える 5

25

クラッシュが直接回線上にある場合:

return cm.getActiveNetworkInfo().isConnectedOrConnecting();

アクティブなネットワークがないため、これはreturnを意味getActiveNetworkInfo()します。その場合、メソッドは returnにする必要があります。nullisConnected()false

于 2010-05-02T13:13:15.310 に答える
8

私はこれを処理するためにこのメソッドを書きました:

public boolean isOnline() {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo ni = cm.getActiveNetworkInfo();
    if (ni!=null && ni.isAvailable() && ni.isConnected()) {
        return true;
    } else {
        return false; 
    }
}

それを行う1つの方法だと思います...

于 2011-04-19T00:07:58.190 に答える
4

インターネットが存在するかどうかを確認するには、デバイスでのみ確認できます......エミュレータでは機能しない可能性があります....私は次のコードを取得し、Androidデバイスで100%動作しています..... :)

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    tv = (TextView)findViewById(R.id.txt);
    b = checkInternetConnection();


    if(b!=true)
    {
        tv.setText("net is not dr.......");
    }
    else
    {
        tv.setText("net is dr.......");
    }

}
//Check weather Internet connection is available or not
public boolean checkInternetConnection() {
           final ConnectivityManager conMgr = (ConnectivityManager) getSystemService (Context.CONNECTIVITY_SERVICE);
           if (conMgr.getActiveNetworkInfo() != null && conMgr.getActiveNetworkInfo().isAvailable() &&    conMgr.getActiveNetworkInfo().isConnected()) {
                 return true;
           } else {
                 System.out.println("Internet Connection Not Present");
               return false;
           }
        }

}

于 2011-07-09T09:05:16.660 に答える
1

このスニペットを使用しました。

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

      }
于 2012-12-21T13:08:50.857 に答える
-2

これを使用して、wifi/3g に接続されているかどうかを判断します。

is3g = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected();
    isWifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected();
    network = is3g||isWifi;

これにより、自分でwifiを有効にできます:

WifiManager wifiManager = (WifiManager) MainWindowYuval.this.getSystemService(Context.WIFI_SERVICE);
                    wifiManager.setWifiEnabled(true);      
于 2011-07-09T09:18:24.273 に答える