我想使用库存彩信源发送彩信。在更多解释之前,我想说它确实适用于某些Android版本,但4.0.3和4.0.4。
在我的服务中,我要求设备使用以下代码启用MMS网络功能:
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
等于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
。因此,我的问题如下:我做错了吗?或者,还有另一种方法吗?
附言:它可以在运行Android 2.3至3.2和4.1及更高版本的设备上使用。
最佳答案
它出现在某些设备上,并且在某些提供程序的支持下,TYPE_MOBILE不是默认的MMS网关,您必须使用其他网关。这是我发现可以解决我的问题的解决方案。
我希望这可以帮助其他人。
// Take a wake lock so we don't fall asleep before the message is downloaded.
createWakeLock();
// Let's try every type
int result = -1;
int[] apnTypes = new int[] {ConnectivityManager.TYPE_MOBILE, ConnectivityManager.TYPE_MOBILE_MMS, ConnectivityManager.TYPE_MOBILE_DUN, ConnectivityManager.TYPE_MOBILE_HIPRI, ConnectivityManager.TYPE_MOBILE_SUPL};
for (int i=0; i<apnTypes.length; i++)
{
result = mConnMgr.startUsingNetworkFeature(apnTypes[i], 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;
}
}
// None found
throw new IOException("Cannot establish MMS connectivity");
关于android - NetworkInfo TYPE_MOBILE_MMS功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14395340/