android开发之获取信号强度

来源:互联网 发布:看不起同学知乎 编辑:程序博客网 时间:2024/05/16 12:33

转自:http://blog.csdn.net/zmwell/article/details/6826700

—— 路漫漫其修远兮,吾将上下而求索

——刚接触android一个月,想把自己学到的一些东西记录下来以激励自己

获取信号强度用到的相关的包android.telephony,用到的相关的类有

android.telephony.PhoneStateListener;

android.telephony.SignalStrength;

android.telephony.TelephonyManager;

代码:

public class GetGsmSignalStrength extends Activity {    //TelephonyManager类的对象TelephonyManager Tel;    //MyPhoneStateListener类的对象,即设置一个监听器对象MyPhoneStateListener MyListener;    /** 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();        //Return the handle to a system-level service by name.通过名字获得一个系统级服务        Tel = ( TelephonyManager )getSystemService(Context.TELEPHONY_SERVICE);        //Registers a listener object to receive notification of changes in specified telephony states.设置监听器监听特定事件的状态        Tel.listen(MyListener ,PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);        }    @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);            //cinr:Carrier to Interference plus Noise Ratio(载波与干扰和噪声比)            Toast.makeText(getApplicationContext(), "Go to Firstdroid!!! GSM Cinr = "+ String.valueOf(signalStrength.getGsmSignalStrength()), Toast.LENGTH_SHORT).show();            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上网的速度那些 )

 

 

原创粉丝点击