2012-03-07 40 views
0

我的應用程序只有在移動網絡可用時才發送短信。 目前我已設置ON WIFI以及移動網絡存在。移動網絡存在檢測

當執行下面的代碼片段給我:

public boolean isNetworkAvailable(Context context) { 
    final ConnectivityManager connMgr = (ConnectivityManager) context 
      .getSystemService(Context.CONNECTIVITY_SERVICE);   
    // WIFI is ON and MOBILE Network is present. 
    final NetworkInfo mobileNetwork = connMgr 
      .getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 
    final State mobileState = mobileNetwork.getState(); 

    if(mobileNetwork!=null) 
    { 
     // RETURNS FALSE 
     Log.d("Contacts","mobileNetwork.isConnected() "+mobileNetwork.isConnected()); 
     // RETURNS FALSE 
     Log.d("Contacts","isConnectedOrConnecting() "+mobileNetwork.isConnectedOrConnecting()); 
     // RETURNS TRUE 
     Log.d("Contacts","mobileNetwork.isAvailable()() "+mobileNetwork.isAvailable()); 
     return mobileNetwork.isAvailable(); 
    } 

    return false; 

} 

的問題是現在如何檢測自己是否能夠基於上述三行的返回值發送短信或不?由於isAvailable()返回true,其他兩行返回false;因爲isAvailable()返回true,其他兩行返回false;

SOLUTION

我已經想出了這個代碼:

TelephonyManager telMgr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
    int simCardState = telMgr.getSimState();   
    int simNetworkType = telMgr.getNetworkType(); 
    int simDataState = telMgr.getDataState(); 
    if(simCardState == TelephonyManager.SIM_STATE_READY && simDataState == TelephonyManager.DATA_CONNECTED) 
    { 
     //NETWORK IS AVAILABLE FOR SENDING SMS 
    } 
+0

我相信這應該有助於HTTP://計算器。 com/questions/2802472/detect-network-connection-type-on-android – waqaslam 2012-03-07 09:27:24

+0

@Waqas感謝這些鏈接,無論網絡是否爲2g,3g等,上面的代碼都會返回相同的結果。我的意圖是檢測移動網絡的存在,返回的上述結果令人困惑(錯誤,錯誤,真實)。 – Ravibhushan 2012-03-07 11:00:08

回答

0

此代碼應幫助您檢測不同的狀態

TelephonyManager telMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
int simCardState = telMgr.getSimState(); 
switch (simCardState) { 
    case TelephonyManager.SIM_STATE_ABSENT: 
     // do something 
     break; 
    case TelephonyManager.SIM_STATE_NETWORK_LOCKED: 
     // do something 
     break; 
    case TelephonyManager.SIM_STATE_PIN_REQUIRED: 
     // do something 
     break; 
    case TelephonyManager.SIM_STATE_PUK_REQUIRED: 
     // do something 
     break; 
    case TelephonyManager.SIM_STATE_READY: 
     // here you may set a flag that the phone is ready to send SMS 
     break; 
    case TelephonyManager.SIM_STATE_UNKNOWN: 
     // do something 
     break; 
} 
+0

感謝您的輸入 – Ravibhushan 2012-03-07 15:21:14

+0

已在查詢下添加了解決方案。 – Ravibhushan 2012-03-07 15:25:00