MMS の TYPE_MOBILE に startUsingNetworkFeature を使用しようとしていますが、Sprint 電話でテストするたびに、代わりに WIFI サービスが開始されます。ATT と Verizon の電話で問題なく動作します (3 つのネットワークすべてで、テスト電話に 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:タイプ: mobile_mms[CDMA - EvDo rev. A]、状態: 切断/IDLE、理由: (未指定)、追加: (なし)、ローミング: false、フェイルオーバー: false、isAvailable: true 11-14 10:41:12.951: V/main(2772): ConnectivityBroadcastReceiver を処理する.onReceive(): NetworkInfo:タイプ: WIFI[]、状態: 接続/接続、理由: (未指定)、追加: (なし)、ローミング: 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 スマートフォンで動作します。
更新:これが私の許可リストです
「android.permission.ACCESS_NETWORK_STATE」
「android.permission.CHANGE_NETWORK_STATE」
更新 2: Sprint で Galaxy Nexus に取り組んでいますが、Sprint で HTC Thunderbolt には取り組んでいません。GNex では、設定でデータが無効になっていました
更新 3: HTC Thunderbolt で、コードを実行してからモバイル データ設定を確認すると、モバイル ネットワークが「サービスが利用できないため切断されました」と表示されます。ただし、アプリを強制終了すると、モバイル ネットワークは正常に戻りますか? このコードの何かが原因で、HTC Thunderbolt でネットワークがオフになります。
更新 4:テスト中に次の logcat 出力が表示されます。
11-14 14:49:35.866: V/main(1078): TYPE_MOBILE ステータス NetworkInfo: タイプ: モバイル[CDMA - EvDo rev. A]、状態: 切断/切断、理由: dataConnectionDenied、追加: (なし)、ローミング: false、フェイルオーバー: false、isAvailable: true 11-14 14:49:35.866: V/main(1078): TYPE_MOBILE_MMS ステータス NetworkInfo:タイプ: mobile_mms[CDMA - EvDo rev. A]、状態: 切断/IDLE、理由: psRestrictDisabled、追加: (なし)、ローミング: false、フェイルオーバー: false、isAvailable: true
接続要求が拒否されているようですが、なぜこれが起こっているのか誰か知っていますか?