2016-12-12 10 views
0

間のモバイル接続サブタイプの変更がConnectivityManager.CONNECTIVITY_ACTIONための意図を聞く検出する方法、それだけ等の接続変更(接続/非接続)または無線LANからモバイルへの変更のためアンドロイド2G/3G/4G

ようだが、モバイル接続で2G, 3G, 4G,の間の変更が意図された放送を得ることができない場合。

2G connectionでアプリを無効にするか、3G/4G connectionで有効にします。アプリはバックグラウンドで実行されます。だから変更を聞く必要があります。

達成することは可能ですか?

enter image description here

私はまた、システムは、上記の画像のような通知におけるネットワークタイプとショーの変化を聞く方法を知っていただきたいと思います。

+0

http://stackoverflow.com/questions/2802472/detect-network-connection-type-on-android – sasikumar

答えて

2

TelephonyManagerでgetNetworkTypeメソッドを使用することによって、2Gまたは3Gを識別できます。各変更が発生するため

public String getNetworkClass(Context context) { 
TelephonyManager mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
int networkType = mTelephonyManager.getNetworkType(); 
switch (networkType) { 
    case TelephonyManager.NETWORK_TYPE_GPRS: 
    case TelephonyManager.NETWORK_TYPE_EDGE: 
    case TelephonyManager.NETWORK_TYPE_CDMA: 
    case TelephonyManager.NETWORK_TYPE_1xRTT: 
    case TelephonyManager.NETWORK_TYPE_IDEN: 
     return "2G"; 
    case TelephonyManager.NETWORK_TYPE_UMTS: 
    case TelephonyManager.NETWORK_TYPE_EVDO_0: 
    case TelephonyManager.NETWORK_TYPE_EVDO_A: 
    case TelephonyManager.NETWORK_TYPE_HSDPA: 
    case TelephonyManager.NETWORK_TYPE_HSUPA: 
    case TelephonyManager.NETWORK_TYPE_HSPA: 
    case TelephonyManager.NETWORK_TYPE_EVDO_B: 
    case TelephonyManager.NETWORK_TYPE_EHRPD: 
    case TelephonyManager.NETWORK_TYPE_HSPAP: 
     return "3G"; 
    case TelephonyManager.NETWORK_TYPE_LTE: 
     return "4G"; 
    default: 
     return "Unknown"; 
    } 
    } 

が、その後もLISTEN_DATA_CONNECTION_STATEためphonestatelistenerに耳を傾ける必要がある android.telephony.TelephonyManager

+0

はい、既に使用されています。しかし、自分でポーリングする必要なく、動的に変更が発生したときに通知方法が必要です。どのようにアンドロイド右上の通知はそれを達成する?それは、Hまたは3GまたはLTEへの変更を示します... –

+0

私の更新の答えを確認 – sasikumar

+0

はい、既にConnectionManager.CONNECTIVITY_ACTIONを待ち受け、その時に追加のネットワーク情報を取得し、サブタイプを確認してください。 Nexus 5のAndroid 6.0.1でテスト中です。モバイルサブタイプが変更された場合や、サブタイプが不明な場合は呼び出されません。 –

0

を参照してください。詳細についてはBroadcastReceiver

private class NetworkSwitcher extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
    String action = intent.getAction(); 
    if (!action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) { 
     return; 
    } 
    NetworkInfo networkInfo = 
     (NetworkInfo)intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); 
    if (networkInfo.isConnected()) { 

      Log.d(TAG, "Network type: " + networkInfo.getTypeName() + 
        " Network subtype: " + networkInfo.getSubtypeName()); 

    // check your condition here 

    } 
    else { 
     Log.e(TAG, "Network connection lost"); 
    } 
} 
} 

を使用し、これは、モバイルネットワークの種類を報告します。