我想使用库存彩信源发送彩信。在更多解释之前,我想说它确实适用于某些 android 版本,但 4.0.3 和 4.0.4。
在我的服务中,我要求设备使用以下代码启用彩信网络功能:
createWakeLock();
int result = mConnMgr.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, PhoneEx.FEATURE_ENABLE_MMS);
Log.v(TAG, "beginMmsConnectivity: result=" + result);
switch (result) {
case PhoneEx.APN_ALREADY_ACTIVE:
case PhoneEx.APN_REQUEST_STARTED:
acquireWakeLock();
return result;
}
throw new IOException("Cannot establish MMS connectivity");
在某些设备上(运行 4.0.3 的 Xperia T),它会抛出异常,因为result
equals PhoneEx.APN_TYPE_NOT_AVAILABLE
。彩信在我的手机设置中启用,我可以使用股票彩信应用程序发送一个。
在其他设备上(运行 4.0.4 的 HTC Desire S),问题位于更远的位置,在ConnectivityBroadcastReceiver
. 这是我的代码:
private class ConnectivityBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
String action = intent.getAction();
mNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
mOtherNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_OTHER_NETWORK_INFO);
networkAttempt++;
if (networkAttempt < APN_RETRY_ATTEMPTS) {
// Check availability of the mobile network.
if ((mNetworkInfo == null) || (mNetworkInfo.getType() != ConnectivityManager.TYPE_MOBILE_MMS)) {
// ERROR is located here, it returns TYPE_MOBILE :s
Log.v(TAG, " type is not TYPE_MOBILE_MMS, bail");
return;
}
}
...
正如你在评论中看到的,mNetworkInfo.getType()
返回TYPE_MOBILE
但我期望TYPE_MOBILE_MMS
.
所以,我的问题如下:我做错了吗?或者,还有其他方法吗?
Ps:它适用于运行Android 2.3到3.2和4.1及更高版本的设备。