How to get Android signal strength

I just started developing android, and I'm trying to figure out how to get signal strength from users. The following code gives me Dbm for a GSM network:

TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);

// Get GSM Signal Strength (Dbm)
CellInfoGsm GSM = (CellInfoGsm)telephonyManager.getAllCellInfo().get(0);
CellSignalStrengthGsm cellSignalStrengthGsm = GSM.getCellSignalStrength();
signalStrength = cellSignalStrengthGsm.getDbm();

However, I want to be able to receive signal power from any network. Perhaps it is GSM, LTE, CDMA or WCDMA. I looked at the documentation on telephony, but I was lost in how to do this. I tried to take the same code as above and just replace Gsm with Lte, but it ended up crashing my emulator.

Any help would be greatly appreciated.

Updated and added listener from the answer below. However, now, as soon as I run the application, it will work. This is a log file.

05-26 11:25:21.140: D/AndroidRuntime(921): Shutting down VM
05-26 11:25:21.140: W/dalvikvm(921): threadid=1: thread exiting with uncaught exception (group=0xb3aecba8)
05-26 11:25:21.170: E/AndroidRuntime(921): FATAL EXCEPTION: main
05-26 11:25:21.170: E/AndroidRuntime(921): Process: com.example.androidcellinfo, PID: 921
05-26 11:25:21.170: E/AndroidRuntime(921): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.androidcellinfo/com.example.androidcellinfo.MainActivity}: java.lang.NullPointerException
05-26 11:25:21.170: E/AndroidRuntime(921):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
05-26 11:25:21.170: E/AndroidRuntime(921):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
05-26 11:25:21.170: E/AndroidRuntime(921):  at android.app.ActivityThread.access$800(ActivityThread.java:135)
05-26 11:25:21.170: E/AndroidRuntime(921):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
05-26 11:25:21.170: E/AndroidRuntime(921):  at android.os.Handler.dispatchMessage(Handler.java:102)
05-26 11:25:21.170: E/AndroidRuntime(921):  at android.os.Looper.loop(Looper.java:136)
05-26 11:25:21.170: E/AndroidRuntime(921):  at android.app.ActivityThread.main(ActivityThread.java:5017)
05-26 11:25:21.170: E/AndroidRuntime(921):  at java.lang.reflect.Method.invokeNative(Native Method)
05-26 11:25:21.170: E/AndroidRuntime(921):  at java.lang.reflect.Method.invoke(Method.java:515)
05-26 11:25:21.170: E/AndroidRuntime(921):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
05-26 11:25:21.170: E/AndroidRuntime(921):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
05-26 11:25:21.170: E/AndroidRuntime(921):  at dalvik.system.NativeStart.main(Native Method)
05-26 11:25:21.170: E/AndroidRuntime(921): Caused by: java.lang.NullPointerException
05-26 11:25:21.170: E/AndroidRuntime(921):  at com.example.androidcellinfo.CellInfo.<init>(CellInfo.java:74)
05-26 11:25:21.170: E/AndroidRuntime(921):  at com.example.androidcellinfo.MainActivity.onCreate(MainActivity.java:28)
05-26 11:25:21.170: E/AndroidRuntime(921):  at android.app.Activity.performCreate(Activity.java:5231)
05-26 11:25:21.170: E/AndroidRuntime(921):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
05-26 11:25:21.170: E/AndroidRuntime(921):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
05-26 11:25:21.170: E/AndroidRuntime(921):  ... 11 more
05-26 11:25:25.090: I/Process(921): Sending signal. PID: 921 SIG: 9

Here is the code for line 74 (CellInfo) Code Snippet 1

Here is the code for line 28 (MainActivity) Code Snippet 2

+4
1

?
Android?
Android: GSM
GSM Android


, :

http://developer.android.com/reference/android/telephony/SignalStrength.html

http://www.firstdroid.com/2010/05/12/get-provider-gsm-signal-strength/


, ( ):

PhoneStateListener phoneStateListener = new PhoneStateListener() {
    public void onCallForwardingIndicatorChanged(boolean cfi) {}
    public void onCallStateChanged(int state, String incomingNumber) {}
    public void onCellLocationChanged(CellLocation location) {}
    public void onDataActivity(int direction) {}
    public void onDataConnectionStateChanged(int state) {}
    public void onMessageWaitingIndicatorChanged(boolean mwi) {}
    public void onServiceStateChanged(ServiceState serviceState) {}
    //Deprecated
    //public void onSignalStrengthChanged(int asu) 
    public void onSignalStrengthChanged (SignalStrength signalStrength)
    {
         //Do your thing
    }
};

PhoneStateListener, Telephony Manager , , , :

telephonyManager.listen(phoneStateListener,
                        PhoneStateListener.LISTEN_CALL_FORWARDING_INDICATOR |
                        PhoneStateListener.LISTEN_CALL_STATE |
                        PhoneStateListener.LISTEN_CELL_LOCATION |
                        PhoneStateListener.LISTEN_DATA_ACTIVITY |
                        PhoneStateListener.LISTEN_DATA_CONNECTION_STATE |
                        PhoneStateListener.LISTEN_MESSAGE_WAITING_INDICATOR |
                        PhoneStateListener.LISTEN_SERVICE_STATE |
                        PhoneStateListener.LISTEN_SIGNAL_STRENGTH);

:

Android: GSM

0

Source: https://habr.com/ru/post/1541965/


All Articles