我正在尝试使用针对MMS的TYPE_MOBILE的startUsingNetworkFeature,每次我在Sprint手机上测试它只是启动WIFI服务 . 它在ATT和Verizon手机上运行良好(我在所有三个网络上都使用Galaxy Nexus作为我的测试手机) .

这是我的代码和相关的logcat输出:

public class main extends FragmentActivity {

        private static final String TAG = "main";
        private ConnectivityManager mConnMgr;
        private ConnectivityBroadcastReceiver mReceiver;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            mConnMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            mReceiver = new ConnectivityBroadcastReceiver();


            beginConnectivity();

        }

        private int beginConnectivity() {

            int result = mConnMgr.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, PhoneEx.FEATURE_ENABLE_MMS);

            Log.v(TAG, "beginMmsConnectivity: result=" + result);

            return result;
        }

        @Override
        protected void onResume() {
            // TODO Auto-generated method stub
            super.onResume();
            IntentFilter intentFilter = new IntentFilter();
            intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
            registerReceiver(mReceiver, intentFilter);

        }

        @Override
        protected void onPause() {
            // TODO Auto-generated method stub
            super.onPause();

            unregisterReceiver(mReceiver);
        }

        private class ConnectivityBroadcastReceiver extends BroadcastReceiver {
            @Override
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
                Log.w(TAG, "ConnectivityBroadcastReceiver.onReceive() action: " + action);

                NetworkInfo networkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);

                NetworkInfo mmsNetworkInfo = mConnMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
                Log.v(TAG, "" + mmsNetworkInfo);


                Log.v(TAG, "Handle ConnectivityBroadcastReceiver.onReceive(): " + networkInfo);

                // Check availability of the mobile network.
                if ((networkInfo == null) || (networkInfo.getType() != ConnectivityManager.TYPE_MOBILE_MMS)) {
                    Log.v(TAG, "   type is not TYPE_MOBILE_MMS, bail");
                    return;
                }

                if (!networkInfo.isConnected()) {
                    Log.v(TAG, "   TYPE_MOBILE_MMS not connected, bail");
                }

                return;
            }
        };

    }

11-14 10:41:12.951:V / main(2772):NetworkInfo: type: mobile_mms[CDMA - EvDo rev. A], state: DISCONNECTED/IDLE, 原因:(未指定),额外:(无),漫游:false,故障转移:false,isAvailable:true 11-14 10:41:12.951 :V / main(2772):Handle ConnectivityBroadcastReceiver.onReceive():NetworkInfo: type: WIFI[], state: CONNECTED/CONNECTED ,原因:(未指定),额外:(无),漫游:false,故障转移:false,isAvailable:true 11-14 10:41:12.951 :V / main(2772):类型不是TYPE_MOBILE_MMS,保释

我也记录了TYPE_MOBILE_MMS的状态,仅供比较 . 我希望代码启动TYPE_MOBILE_MMS网络功能,广播接收器接收该网络的网络更改事件,但它始终只是接收wifi更改,永远不会激活正确的网络 .

Sprint手机有什么独特之处吗?再次,这适用于ATT和Verizon,所有这些都在Galaxy Nexus手机上进行了最新更新 .

update: 这是我的许可列表

  • “android.permission.ACCESS_NETWORK_STATE”

  • “android.permission.CHANGE_NETWORK_STATE”

update 2: 在Sprint上使用Galaxy Nexus,但在Sprint上没有HTC Thunderbolt . GNex在prefs中禁用了数据

update 3: 在HTC Thunderbolt上,每当我运行代码然后检查移动数据设置时,它将移动网络显示为"disconnected because service is unavailable" . 但是,当我强制关闭应用程序时,移动网络恢复正常?有关此代码的信息导致网络关闭HTC Thunderbolt .

update 4: 我在测试期间看到了以下logcat输出,

11-14 14:49:35.866:V / main(1078):TYPE_MOBILE状态NetworkInfo:type:mobile [CDMA - EvDo rev . A], state: DISCONNECTED/DISCONNECTED, reason: dataConnectionDenied ,extra :(无),漫游:false,故障转移:false,isAvailable:true 11-14 14:49:35.866:V / main(1078):TYPE_MOBILE_MMS状态NetworkInfo:type:mobile_mms [CDMA - EvDo rev . A], state: DISCONNECTED/IDLE, reason: psRestrictDisabled ,额外:(无),漫游:false,故障转移:false,isAvailable:true

似乎连接请求被拒绝,有人知道为什么会发生这种情况吗?