我有一个应用程序可以自动将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手机(例如)......
所以问题是:是否有可靠的方法来检查手机是否真的能够通过当前连接发送短信?