1

我想使用库存彩信源发送彩信。在更多解释之前,我想说它确实适用于某些 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),它会抛出异常,因为resultequals 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及更高版本的设备。

4

1 回答 1

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");
于 2013-01-24T14:44:52.210 回答