可靠的方法来检查设备是否可以发送具有当前连接的SMS

时间:2015-08-10 10:19:49

标签: android sms

我有一个应用程序可以自动将SMS发送到远程服务器。我想在调用SMSManager.send()方法之前检查手机是否连接到能够发送短信的网络。

我尝试了以下方法:

TelephonyManager tlm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
boolean hasNetwork = tlm.getNetworkType() != android.telephony.TelephonyManager.NETWORK_TYPE_UNKNOWN;

不幸的是,这种方法适用于某些手机,如Acer或Nexus,但不适用于某些手机,如Sony Xperia。

然后我尝试了另一种方法:检查手机是否连接到天线(我假设连接到天线时有网络)

private static boolean isSmsNetworkAvailable(Context context) {
    TelephonyManager tlm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    boolean hasNetwork = false;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        // new API
        List<CellInfo> listCellInfo = tlm.getAllCellInfo();
        if (listCellInfo != null && !listCellInfo.isEmpty()) {
            for (CellInfo cellInfo : listCellInfo) {
                if (cellInfo.isRegistered()) {
                    hasNetwork = true;
                    break;
                }
            }
        }
    } else {
        // old API
        List<NeighboringCellInfo> listNeighboringCellInfo = tlm.getNeighboringCellInfo();
        if (listNeighboringCellInfo != null && !listNeighboringCellInfo.isEmpty()) {
            hasNetwork = true;
        }
    }
    return hasNetwork;
}

此方法也不可靠,适用于Nexus,Xperia,但不适用于Acer手机(例如)......

所以问题是:是否有可靠的方法来检查手机是否真的能够通过当前连接发送短信?

0 个答案:

没有答案