25

私は、インターネットに継続的に接続されたままになる Android アプリに取り組んでいます。インターネットがダウンしている場合、ユーザーに適切なメッセージを提供する必要があります。

インターネットリスナーのようなものはありますか? または、インターネット接続が利用できないときはいつでも警告を発するこのイベントを実装する方法。

4

2 に答える 2

50

そのための Broadcast Receiver を 1 つ作成し、マニフェスト ファイルに登録します。

最初に新しいクラスNetworkStateReceiverを作成し、BroadcastReceiver を拡張します。

public class NetworkStateReceiver extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent) {
     Log.d("app","Network connectivity change");
     if(intent.getExtras()!=null) {
        NetworkInfo ni=(NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO);
        if(ni!=null && ni.getState()==NetworkInfo.State.CONNECTED) {
            Log.i("app","Network "+ni.getTypeName()+" connected");
        }
     }
     if(intent.getExtras().getBoolean(ConnectivityManager.EXTRA_NO_CONNECTIVITY,Boolean.FALSE)) {
            Log.d("app","There's no network connectivity");
     }
   }
}

このコードを AndroidManifest.xml の「application」要素の下に配置します。

<receiver android:name=".NetworkStateReceiver">
   <intent-filter>
      <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
   </intent-filter>
</receiver>

そして、この許可を追加します

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

編集

このコードは、接続の変更を検出するだけで、接続先のネットワークにインターネット アクセスがあるかどうかを判断できません。このメソッドを使用して、次のことを確認してください -

public static boolean hasActiveInternetConnection(Context context) {
    if (isNetworkAvailable(context)) {
        try {
            HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.google.com").openConnection());
            urlc.setRequestProperty("User-Agent", "Test");
            urlc.setRequestProperty("Connection", "close");
            urlc.setConnectTimeout(1500); 
            urlc.connect();
            return (urlc.getResponseCode() == 200);
        } catch (IOException e) {
        Log.e(LOG_TAG, "Error checking internet connection", e);
        }
    } else {
    Log.d(LOG_TAG, "No network available!");
    }
    return false;
}
于 2012-08-28T10:16:01.297 に答える