2013-01-18 55 views
1

我想使用股票彩信源發送彩信。在更多的解釋之前,我想說的是它在一些android版本上工作,但是4.0.3和4.0.4。NetworkInfo TYPE_MOBILE_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"); 

在某些設備(的Xperia牛逼運行4.0.3),它拋出一個異常,因爲result等於PhoneEx.APN_TYPE_NOT_AVAILABLE 。彩信在我的手機設置中啓用,我可以發送一個與股票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");