首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >移动网络状态检测

移动网络状态检测
EN

Stack Overflow用户
提问于 2012-03-07 17:13:59
回答 1查看 605关注 0票数 0

我的应用程序仅在移动网络可用时发送短信。目前我已经设置了WIFI以及移动网络。

下面的代码片段在执行时提供给我:

代码语言:javascript
复制
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;

解决方案

我想出了这个代码:

代码语言:javascript
复制
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
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-07 19:18:21

这段代码应该可以帮助您检测不同的状态

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9598575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档