2014-08-30 70 views
2

我正試圖製作一個應用程序,以顯示使用TelephonyManager完成的網絡類型(2G,3G或4G)的狀態,以及每當網絡類型改變時通知用戶。 這是我遇到問題的部分,如何監控網絡類型並在其發生變化時收到通知?如何監控網絡類型並在其發生變化時收到通知

+0

您是否嘗試過TelephonyManager中的「偵聽」方法? – hoomi 2014-08-30 11:43:40

+0

我無法理解[Google參考資料](http://developer.android.com/reference/android/telephony/TelephonyManager.html#listen(android.telephony.PhoneStateListener,int))中的此方法是否可以將其分解對我來說有一點點,請 – 2014-08-30 19:40:23

回答

0

這裏過了一會兒,是一個工作代碼:

onCreate

TelephonyManager TelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
    TelephonyMgr.listen(new TeleListener(), 
      PhoneStateListener.LISTEN_DATA_CONNECTION_STATE); 

,併爲一類:

public class TeleListener extends PhoneStateListener { 
    public void onDataConnectionStateChanged (int state, int networkType){ 
     super.onDataConnectionStateChanged(state, networkType); 
    //Whatever you wanna do 
     } 
} 

onDataConnectionStateChanged(int state, int networkType)被觸發時,無論是networkstype方法(2G, 3G,4G)變化或連接狀態(連接,斷開等)變化

1
+0

謝謝,雖然這顯示了它的移動數據還是wifi或wimax ......我需要的是監視不同類型的移動數據(2G,3G或4G)的任何想法? – 2014-08-30 14:28:41

+0

檢查我編輯的答案 – Breadbin 2014-08-30 15:43:42

+0

感謝您的努力,編輯部分中的兩個鏈接確定移動數據的類型(當調用時),但我希望通過更改時得到通知。 讓我舉個例子;比如說用戶正在乘車旅行,在城市之間或沙漠中,您並不總是擁有3G或4G的覆蓋範圍,並且用戶希望在3或4G網絡可用時立即收到通知。 – 2014-08-30 19:38:12

0

您需要是這樣的:(請記住,這將僅適用於Android 4.2+工作)

// It Only works on Android 4.2+ 
    TelephonyManager telephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); 
    telephonyManager.listen(new PhoneStateListener(){ 

     @Override 
     public void onCellInfoChanged(List<CellInfo> cellInfo) { 
      super.onCellInfoChanged(cellInfo); 
      for (CellInfo ci : cellInfo) { 
       if (ci instanceof CellInfoGsm) { 
        Log.d("TAG", "This has 2G"); 
       } else if (ci instanceof CellInfoLte) { 
        Log.d("TAG", "This has 4G"); 
       } else { 
        Log.d("TAG", "This has 3G"); 
       } 
      } 
     } 


    }, PhoneStateListener.LISTEN_CELL_INFO); 

您還需要android.permission.READ_PHONE_STATE許可,您的清單。

+0

非常感謝您的時間夥伴,我不斷收到>不幸的是,APP已停止<錯誤,這裏是Logcat的紅色部分 > java.lang.NullPointerException at test.e_rundev.ir.test2.MyActivity $ 3.onCellInfoChanged (MyActivity.java:92) at android.telephony.PhoneStateListener $ 2.handleMessage(PhoneStateListener.java:456) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop( Looper.java:157) at android.app.ActivityThread.main(ActivityThread.java:5293)< – 2014-08-31 08:31:03

+0

> at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method。調用(Method.java:515) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1265) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) at dalvik.system.NativeStart。主(本地方法) < 我還添加了權限,你提到的和> android.permission.ACCESS_COARSE_LOCATION <如Android Studio要求我...任何想法? – 2014-08-31 08:31:48

+0

你在'onCellInfoChanged'方法中得到一個NullPointerException,我認爲這是因爲cellInfo爲null。嘗試添加if語句來檢查cellInfo的無效性,看看是否能解決您的問題。順便說一句,你在設備或模擬器上運行它? – hoomi 2014-08-31 08:34:07

相關問題