Java 如何获得android信号强度
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/23859038/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to get android signal strength
提问by RockPaperScissors
I just started developing for android and I am trying to figure out how to get a users signal strength. The following code gives me the Dbm for a GSM network:
我刚刚开始为 android 开发,我正在尝试弄清楚如何获得用户的信号强度。以下代码为我提供了 GSM 网络的 Dbm:
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 get the signal strength from any kind of network. May it be GSM, LTE, CDMA, or WCDMA. I have looked at the telephony documentation but I'm lost in how to go about this. I have tried to take the same code as above and just replace Gsm with Lte but that ended up crashing my emulator.
但是我希望能够从任何类型的网络获得信号强度。可以是 GSM、LTE、CDMA 或 WCDMA。我已经查看了电话文档,但我不知道如何解决这个问题。我试图采用与上面相同的代码,只是用 Lte 替换 Gsm,但最终导致我的模拟器崩溃。
Any help would be greatly appreciated.
任何帮助将不胜感激。
Updated and added the listener from the answer below. However now as soon as i run the app it crashes. This is the 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.access0(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)
这是第 74 行的代码(CellInfo)
Here is the code for line 28 (MainActivity)
这是第 28 行(MainActivity)的代码
回答by Fernando Carvalhosa
Duplicate question?
How to get cell service signal strength in Android?
Android: How do I get GSM signal strength for all available network operators
Retrieve GSM signal strength in Android
重复的问题?
如何在Android中获取手机服务信号强度?
Android:如何获取所有可用网络运营商的
GSM 信号强度 在 Android 中检索 GSM 信号强度
Anyway, check those links above or these references:
无论如何,请检查上面的链接或这些参考资料:
http://developer.android.com/reference/android/telephony/SignalStrength.html
http://developer.android.com/reference/android/telephony/SignalStrength.html
http://www.firstdroid.com/2010/05/12/get-provider-gsm-signal-strength/
http://www.firstdroid.com/2010/05/12/get-provider-gsm-signal-strength/
If you are lazy to check that, this seems to work (didn't check it):
如果你懒得检查,这似乎有效(没有检查):
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
}
};
Once you've created your own PhoneStateListener
, register it with the Telephony Manager
using a bitmask to indicate the events you want to listen for, as shown in the following code snippet:
创建自己的 后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);
How to get a list of all available networks:
如何获取所有可用网络的列表:
Android: How do I get GSM signal strength for all available network operators