2011-04-25 8 views
0

私はいくつかのRSSニュースを示すボタンを持っています。私の問題は、Wi-Fiが無効になっている場合や3g接続がない場合、「インターネットに接続できません」というトーストメッセージを提示したいということです。私はそれを動作させる必要がありますが、私の問題は次の通りです。wifi/3gが有効になっているかどうかを確認するには?

私は、アプリケーションが無線LANを有効にしているか3gで接続しているかどうかを確認したいと思っています。新しい活動に行く3gがある場合、有効になっている場合だけでなく、ユーザーがネットワークに接続されているかどうかを確認し、新しい活動に行くことを確認するwifiがある場合。 3gまたは無線LANが無効になっている場合、私は以前に書いたメッセージを提示したいだけです。

これは私が今のように書かれているコードですが、私は本当に継続する方法がわからない...

マニフェスト:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> 
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS"></uses-permission> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> 
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission> 

そして、私のonCreateメソッドのソース:

答えて

2

使用しているHTTP APIに応じてIOExceptionなどがある場合は、そのメッセージを表示する必要があります(HttpClie例えばnt)。この方法で、Wifiのマネージャーや関連サービスへの不必要な外線通話はしません。

RSSを取得できない場合、ユーザーにはデータサービス(Wi-Fiまたは3G)がありません。

+0

ありがとうございました!私はそれを修正しました – kostas

3

3gまたはWi-Fiが有効かどうかを検出するだけでは複雑です。信号が非常に低いと、「3gが有効になっていても」アプリがフィードを取得できなくなる可能性があります。

あなたのサーバーにpingを送信し、タイムアウトを設定します。一定の時間内に応答が得られない場合(1-5秒と言いましょう)は、Wi-Fiと同じです(公衆のホットスポットですか? )、次にトーストを表示するか、さらにはワイヤレス設定を変更するためのボタンを表示する(http://developer.android.com/reference/android/provider/Settings.html#ACTION_WIRELESS_SETTINGS)

2

3gが有効かどうかを確認するには、あなたはまた、以下のコードを使用することができます。しかし、ネットワークがサポート3グラムをdoesntの場合、これはfalseを返します。

int type = telephonymanager.getNetworkType(); 

if (type == TelephonyManager.NETWORK_TYPE_HSDPA 
    || type == TelephonyManager.NETWORK_TYPE_HSPA 
    || type == TelephonyManager.NETWORK_TYPE_HSUPA 
    || type == TelephonyManager.NETWORK_TYPE_UMTS 
    || type == TelephonyManager.NETWORK_TYPE_EVDO_0 
    || type == TelephonyManager.NETWORK_TYPE_EVDO_A) { 

    Toast.makeText(RemoteService.this, "network type " + type, Toast.LENGTH_SHORT).show(); 
    threegmode = true; 
} 
else { 
    threegmode = false; 
} 
0
private static boolean isConnected(Context context) { 
     ConnectivityManager connectivityManager = (ConnectivityManager) context 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo networkInfo = null; 
     if (connectivityManager != null) { 

      networkInfo = connectivityManager 
        .getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

      if (!networkInfo.isAvailable()) { 
       networkInfo = connectivityManager 
         .getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 
      } 
     } 
     return networkInfo == null ? false : networkInfo.isConnected(); 
    } 
9
ConnectivityManager conMan = ((ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE)); 
boolean isWifiEnabled = conMan.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isAvailable(); 
boolean is3GEnabled = !(conMan.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.DISCONNECTED 
         && conMan.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getReason().equals("dataDisabled")); 
+1

ようこそ。既に受け入れられてアップアップされた回答がある古い質問に回答を投稿する場合は、受け入れられた回答が間違っているか、以前の回答でまだ扱われていない重要な新しい情報が追加されたためです。 –

関連する問題