0

私のアプリケーションは、モバイル ネットワークが利用可能な場合にのみ SMS を送信します。現在、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;

}

問題は、上記の 3 行で返された値に基づいて、SMS を送信できるかどうかを検出する方法です。

isAvailable() は true を返し、他の 2 行は false を返します。

解決

私はこのコードを思いつきました:

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

1 に答える 1

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;
}
于 2012-03-07T11:18:21.193 に答える