2012-07-26 18 views
9

Trong ứng dụng của tôi, tôi muốn cung cấp cho người dùng tùy chọn để chọn wi-fi/GPRS để kết nối mạng với máy chủ web. Có thể là câu trả lời cho các câu hỏi sau giải quyết câu hỏi của tôi ... 1. Cách kiểm tra tùy chọn kết nối mạng mặc định hiện tại được bật. 2. Cách bật wi-fi/GPRS khi người dùng chọn hoặc (tắt wi-fi nếu người dùng chọn GPRS - nếu chỉ có tùy chọn này sẽ được yêu cầu để GPRS hoạt động)Cách cung cấp tùy chọn để chọn wi-fi hoặc GPRS để kết nối mạng trong ứng dụng android

hoặc có cách nào khác xung quanh làm cái này ?

Trả lời

15

Hãy thử điều này:

ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 
NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

if (mWifi.isConnected()) 
    //if wifi connected 
} 

ConnectivityManager connManager1 = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 
NetworkInfo mMobile = connManager1.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

if (mMobile.isConnected()) { 
    //if internet connected 
} 

Đừng quên để thêm các điều khoản trong file manifest;

android.permission.CHANGE_WIFI_STATE 
android.permission.ACCESS_WIFI_STATE 
android.permission.UPDATE_DEVICE_STATS 
android.permission.CHANGE_NETWORK_STATE 
android.permission.ACCESS_NETWORK_STATE 
android.permission.MODIFY_PHONE_STATE 
android.permission.READ_PHONE_STATE 

Để bật hoặc tắt Wifi, sử dụng mWiFi.setWifiEnabled(true|false)

Để bật/tắt GPRS/3G, sử dụng đoạn mã sau.

void turnData(boolean ON) throws Exception 
{ 

if(bv == Build.VERSION_CODES.FROYO) 
{ 

    Log.i("version:", "Found Froyo"); 
    try{ 
     Method dataConnSwitchmethod; 
     Class telephonyManagerClass; 
     Object ITelephonyStub; 
     Class ITelephonyClass; 
     TelephonyManager telephonyManager = (TelephonyManager) getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE); 

     telephonyManagerClass = Class.forName(telephonyManager.getClass().getName()); 
    Method getITelephonyMethod = telephonyManagerClass.getDeclaredMethod("getITelephony"); 
    getITelephonyMethod.setAccessible(true); 
    ITelephonyStub = getITelephonyMethod.invoke(telephonyManager); 
    ITelephonyClass = Class.forName(ITelephonyStub.getClass().getName()); 

    if (ON) { 
     dataConnSwitchmethod = ITelephonyClass.getDeclaredMethod("enableDataConnectivity"); 

    } else { 
     dataConnSwitchmethod = ITelephonyClass.getDeclaredMethod("disableDataConnectivity"); 
    } 
    dataConnSwitchmethod.setAccessible(true); 
    dataConnSwitchmethod.invoke(ITelephonyStub); 
    }catch(Exception e){ 
      Log.e("Error:",e.toString()); 
    } 

} 
else 
{ 
    Log.i("version:", "Found Gingerbread+"); 
    final ConnectivityManager conman = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); 
    final Class conmanClass = Class.forName(conman.getClass().getName()); 
    final Field iConnectivityManagerField = conmanClass.getDeclaredField("mService"); 
    iConnectivityManagerField.setAccessible(true); 
    final Object iConnectivityManager = iConnectivityManagerField.get(conman); 
    final Class iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName()); 
    final Method setMobileDataEnabledMethod = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE); 
    setMobileDataEnabledMethod.setAccessible(true); 
    setMobileDataEnabledMethod.invoke(iConnectivityManager, ON); 
} 

}

+0

Thanx một tấn ... hoạt động tốt – isumit

+1

1 cho dữ liệu internet mặc dù tôi đã không quản lý để kích hoạt wifi theo cách này vì setWifiEnabled là một phương pháp WifiManager này làm việc cho tôi WifiManager wifiManager = (WifiManager) này .getApplicationContext(). getSystemService (Context.WIFI_SERVICE); wifiManager.setWifiEnabled (true); –

3

Bạn có thể cung cấp tùy chọn để người dùng trên màn hình sử dụng khối mã sau ....

public static ShowAvailable() 
{ 
    ConnectivityManager connectivityMgr = (ConnectivityManager) 
    getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo[] nwInfos = connectivityMgr.getAllNetworkInfo(); 
     for (NetworkInfo nwInfo : nwInfos) 
      { 
      Log.d(TAG, "Network Type Name: " + 
      nwInfo.getTypeName()); Log.d(TAG, "Network available: " + 
      nwInfo.isAvailable()); Log.d(TAG, "Network c_or-c: " + 
      nwInfo.isConnectedOrConnecting()); Log.d(TAG, "Network connected: " 
      + nwInfo.isConnected()); 
      } 

} 
1

Tiếp tục câu trả lời @rIHaN JiTHiN, cần lưu ý rằng hai điều khoản android.permission.UPDATE_DEVICE_STATSandroid.permission.MODIFY_PHONE_STATE chỉ được cấp cho ứng dụng hệ thống (vì ban đầu nó được đặt trong Eclipse hoặc Android Studio). Vì vậy, nếu ai đó sẽ phải đối mặt với vấn đề này, hãy xem this solution.

Các vấn đề liên quan