2013-01-18 1 views
1

재고 MMS 원본을 사용하여 MMS를 보내려고합니다. 더 많은 설명을하기 전에, 나는 그것이 일부 안드로이드 버전 4.0.3과 4.0.4에서 작동한다고 말하고 싶다. 내 서비스에서 NetworkInfo TYPE_MOBILE_MMS 기능

, 나는 다음과 같은 코드를 사용하여 MMS 네트워크 기능을 사용하도록 장치를 물어 resultPhoneEx.APN_TYPE_NOT_AVAILABLE 동일하기 때문에 (엑스 페리아 T는 4.0.3을 실행하는) 일부 장치

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"); 

를, 그것은 예외가 발생합니다 . 내 휴대 전화 설정에서 MMS를 사용할 수 있으며 재고 mms 앱으로 MMS를 보낼 수 있습니다.

다른 장치 (HTC Desire S 4.0.4)에서는 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 이상을 실행하는 기기에서 작동합니다.

+0

분명히 문제는 휴대 전화에서 사용하는 APN과 관련이 있습니다. HTC 욕망 S에서는 작동하지만 Xperia에서는 작동하지 않는 것으로 보입니다. – Manitoba

답변

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");