android开发之获取信号强度
16lz
2021-01-24
—— 路漫漫其修远兮,吾将上下而求索
——刚接触android一个月,想把自己学到的一些东西记录下来以激励自己
获取信号强度用到的相关的包android.telephony,用到的相关的类有android.telephony.PhoneStateListener;
android.telephony.SignalStrength;
android.telephony.TelephonyManager;
public class GetGsmSignalStrength extends Activity {TelephonyManager Tel;//TelephonyManager类的对象MyPhoneStateListener MyListener;//MyPhoneStateListener类的对象,即设置一个监听器对象 /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { //SignalStrength signalStrength; super.onCreate(savedInstanceState); setContentView(R.layout.main); //private TextView myText=null; //TextView myText = (TextView)findViewById(R.id.myText); //myText.setText("GSM Cinr = "+ String.valueOf(SignalStrength.signalStrength.getGsmSignalStrength())); MyListener = new MyPhoneStateListener();//初始化对象 Tel = ( TelephonyManager )getSystemService(Context.TELEPHONY_SERVICE);//Return the handle to a system-level service by name.通过名字获得一个系统级服务 Tel.listen(MyListener ,PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);//Registers a listener object to receive notification of changes in specified telephony states.设置监听器监听特定事件的状态 } @Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();Tel.listen(MyListener, PhoneStateListener.LISTEN_NONE);} @Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();Tel.listen(MyListener,PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);} private class MyPhoneStateListener extends PhoneStateListener{//监听器类 /*得到信号的强度由每个tiome供应商,有更新*/ TextView myText = (TextView)findViewById(R.id.myText); TextView myText1=(TextView)findViewById(R.id.myText1); @Override public void onSignalStrengthsChanged(SignalStrength signalStrength){ super.onSignalStrengthsChanged(signalStrength);//调用超类的该方法,在网络信号变化时得到回答信号 Toast.makeText(getApplicationContext(), "Go to Firstdroid!!! GSM Cinr = "+ String.valueOf(signalStrength.getGsmSignalStrength()), Toast.LENGTH_SHORT).show();//cinr:Carrier to Interference plus Noise Ratio(载波与干扰和噪声比) myText.setText("CDMA RSSI = "+ String.valueOf(signalStrength.getCdmaDbm())); myText1.setText("GSM Cinr = "+ String.valueOf(signalStrength.getGsmSignalStrength())); } }}
上面的代码参考了别人的程序,并在基础上做了一些小小的改动。
下面是关于信号强度的一些总结。(参考了网上一些资料)
信号强度单位:android定义了2种信号单位:dBm(1毫瓦的分贝数)和asu(alone signal unit 独立信号单元)。
它们之间的关系是:dBm =-113+2*asu,这是google给android手机定义的特有信号单位。而且信号强度数值越大越好,67dbm VS -90dbm ,前者信号比后者好!中国移动的规范规定,手机接收电平>=(城市取-90dBm;乡村取-94dBm)时,则满足覆盖要求,也就是说此处无线信号强度满足覆盖要求,即接受电平>=-90dBm,就可以满足覆盖要求
-67dBm要比-90dBm信号要强20多个dB,那么它在打电话接通成功率和通话过程中的话音质量都会好的多(当然也包括EDGE(EDGE是一种从GSM到3G的过渡技术)/GPRS上网的速度那些 )
更多相关文章
- Android中FTP上传、下载(含进度)
- 理解杀进程的实现原理
- Android_开发 实用滚轮效果选择数字(十三)
- Android实现 ScrollView + ListView无滚动条滚动
- seekBard的使用方法
- android 自定义View设置自定义监听 框架(监听自定义字符)
- android HDMI (一):HDMI基础篇
- Android(安卓)API 中提供的20个服务
- [Com]Java中的串口编程