1

ストックMMSソースを使用してMMSを送信したい。詳細な説明の前に、それはいくつかのアンドロイドバージョンで動作しますが、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。MMSは私の電話設定で有効になっており、ストックmmsアプリで送信できます。

他のデバイス(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ます。

だから、私の質問は次のとおりです:私は何か間違ったことをしましたか?または、それを行う別の方法はありますか?

追伸:Android2.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 に答える