我正試圖製作一個應用程序,以顯示使用TelephonyManager完成的網絡類型(2G,3G或4G)的狀態,以及每當網絡類型改變時通知用戶。 這是我遇到問題的部分,如何監控網絡類型並在其發生變化時收到通知?如何監控網絡類型並在其發生變化時收到通知
回答
這裏過了一會兒,是一個工作代碼:
下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)變化或連接狀態(連接,斷開等)變化
你應該在這裏找到你的答案網絡改變http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html
編輯移動網絡檢查出這個答案。 https://stackoverflow.com/a/21721139/1898809
謝謝,雖然這顯示了它的移動數據還是wifi或wimax ......我需要的是監視不同類型的移動數據(2G,3G或4G)的任何想法? – 2014-08-30 14:28:41
檢查我編輯的答案 – Breadbin 2014-08-30 15:43:42
感謝您的努力,編輯部分中的兩個鏈接確定移動數據的類型(當調用時),但我希望通過更改時得到通知。 讓我舉個例子;比如說用戶正在乘車旅行,在城市之間或沙漠中,您並不總是擁有3G或4G的覆蓋範圍,並且用戶希望在3或4G網絡可用時立即收到通知。 – 2014-08-30 19:38:12
您需要是這樣的:(請記住,這將僅適用於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
許可,您的清單。
非常感謝您的時間夥伴,我不斷收到>不幸的是,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
> 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
你在'onCellInfoChanged'方法中得到一個NullPointerException,我認爲這是因爲cellInfo爲null。嘗試添加if語句來檢查cellInfo的無效性,看看是否能解決您的問題。順便說一句,你在設備或模擬器上運行它? – hoomi 2014-08-31 08:34:07
- 1. 如何在TextBlock文本發生變化時收到通知
- 2. 如何在操作系統時間發生變化時收到通知
- 3. 監控Android服務中的網絡連接類型變化
- 4. 數據庫發生變化時收到通知c#
- 5. 當RegistryKey值發生變化時收到通知
- 6. 網絡可用時會收到通知
- 7. 如何在鍵盤佈局發生變化時得到通知?
- 8. Google Cloud Messaging - 在網絡狀態發生變化時有時收不到消息
- 9. 在Cocoa/Obj-C應用程序中的網絡連接發生變化時收到通知
- 10. 如何在WiFi網絡狀態更改時收到通知?
- 11. 如何在網絡狀態更改時收到通知?
- 12. 新聞傳送發生變化時,如何通過API接收Facebook通知?
- 13. 對象發生變化時通知TObjectList
- 14. 如何在輸入發生變化時通知我?
- 15. 如何在網站HTML中的數據發生變化時創建通知
- 16. 網絡監控
- 17. iPhone通知當wifi網絡變化
- 18. 當數據/模型發生變化時通知視圖/活動
- 19. 索引時Numba類型發生變化
- 20. Mac OS X - 當最前面的窗口發生變化時收到通知
- 21. 當打開的彈出窗口的位置發生變化時收到通知
- 22. gtk.paned滑塊位置發生變化時如何通知? (c#)
- 23. 如何在使用setRequestedOrientation()後方向會發生變化時得到通知?
- 24. 當Windows連接到網絡時收到通知
- 25. 如何SMS_RECEIVED廣播接收器啓動網絡狀態發生變化後
- 26. 與網絡監控
- 27. 如何在網站更新時通過手機收到通知?
- 28. Android&Rx Java 2:當對象發生變化時得到通知
- 29. 如何接收從網絡到android的通知?
- 30. 我該如何向其他人發送網絡/桌面通知?
您是否嘗試過TelephonyManager中的「偵聽」方法? – hoomi 2014-08-30 11:43:40
我無法理解[Google參考資料](http://developer.android.com/reference/android/telephony/TelephonyManager.html#listen(android.telephony.PhoneStateListener,int))中的此方法是否可以將其分解對我來說有一點點,請 – 2014-08-30 19:40:23