NetworkDetector: uses android.telephony.TelephonyManager to obtain telephony parameters like network
16lz
2021-01-26
/*
*Copyright(C)2011TheAndroidOpenSourceProject
*
*LicensedundertheApacheLicense,Version2.0(the"License");
*youmaynotusethisfileexceptincompliancewiththeLicense.
*YoumayobtainacopyoftheLicenseat
*
*http://www.apache.org/licenses/LICENSE-2.0
*
*Unlessrequiredbyapplicablelaworagreedtoinwriting,software
*distributedundertheLicenseisdistributedonan"ASIS"BASIS,
*WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.
*SeetheLicenseforthespecificlanguagegoverningpermissionsand
*limitationsundertheLicense.
*/
packagecom.example.android.apis.telephony;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.telephony.PhoneStateListener;
importandroid.telephony.ServiceState;
importandroid.telephony.TelephonyManager;
importandroid.widget.TextView;
/**
*Activitythatuses{@linkandroid.telephony.TelephonyManager}toobtain
*telephonyparameterslikenetworkstate,phonetypeandSIMstate.
*/
publicclassNetworkDetectorextendsActivity{
/*
*SIMstateconstants
*/
publicstaticfinalStringSIM_ABSENT="Absent";
publicstaticfinalStringSIM_READY="Ready";
publicstaticfinalStringSIM_PIN_REQUIRED="PINrequired";
publicstaticfinalStringSIM_PUK_REQUIRED="PUKrequired";
publicstaticfinalStringSIM_NETWORK_LOCKED="Networklocked";
publicstaticfinalStringSIM_UNKNOWN="Unknown";
/*
*Networktypeconstants
*/
publicstaticfinalStringNETWORK_CDMA="CDMA:EitherIS95AorIS95B(2G)";
publicstaticfinalStringNETWORK_EDGE="EDGE(2.75G)";
publicstaticfinalStringNETWORK_GPRS="GPRS(2.5G)";
publicstaticfinalStringNETWORK_UMTS="UMTS(3G)";
publicstaticfinalStringNETWORK_EVDO_0="EVDOrevision0(3G)";
publicstaticfinalStringNETWORK_EVDO_A="EVDOrevisionA(3G-Transitional)";
publicstaticfinalStringNETWORK_EVDO_B="EVDOrevisionB(3G-Transitional)";
publicstaticfinalStringNETWORK_1X_RTT="1xRTT(2G-Transitional)";
publicstaticfinalStringNETWORK_HSDPA="HSDPA(3G-Transitional)";
publicstaticfinalStringNETWORK_HSUPA="HSUPA(3G-Transitional)";
publicstaticfinalStringNETWORK_HSPA="HSPA(3G-Transitional)";
publicstaticfinalStringNETWORK_IDEN="iDen(2G)";
publicstaticfinalStringNETWORK_LTE="LTE(4G)";
publicstaticfinalStringNETWORK_EHRPD="EHRPD(3G)";
publicstaticfinalStringNETWORK_HSPAP="HSPAP(3G)";
publicstaticfinalStringNETWORK_UNKOWN="Unknown";
/*
*Phonetypeconstants
*/
publicstaticfinalStringPHONE_CDMA="CDMA";
publicstaticfinalStringPHONE_GSM="GSM";
publicstaticfinalStringPHONE_SIP="SIP";
publicstaticfinalStringPHONE_NONE="Noradio";
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//Getthetelephonysystemservicetofindoutnetworkdetails
finalTelephonyManagertm=(TelephonyManager)getSystemService(TELEPHONY_SERVICE);
//Updatetextviewswithreadablevalues.
updateViews(tm);
//Sincetheseattributescanchange,wewillregistera
//{@codePhoneStateListener}tolistenforthesechangesand
//updatetheview.
tm.listen(newPhoneStateListener(){
@Override
publicvoidonServiceStateChanged(ServiceStateserviceState){
//UpdateourTextViews
updateViews(tm);
}
@Override
publicvoidonDataConnectionStateChanged(intstate){
//Achangeindataconnectionstatemaybeduetoavailability
//ofadifferentnetworktype
updateViews(tm);
}
},PhoneStateListener.LISTEN_SERVICE_STATE
|PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);
}
@Override
protectedvoidonResume(){
super.onResume();
finalTelephonyManagertm=(TelephonyManager)getSystemService(TELEPHONY_SERVICE);
//Updatetextviewswithreadablevalues.
updateViews(tm);
}
/**
*Updatetextviewswithtelephonyattributes.
*/
privatefinalvoidupdateViews(TelephonyManagertm){
//Thetelephonysystemservicereturnsintegerconstantsforvarious
//telephonyattributes.
TextViewview=null;
view=(TextView)findViewById(R.id.sim_state);
view.setText("SIMState:"+mapSimStateToName(tm.getSimState()));
view=(TextView)findViewById(R.id.network_type);
view.setText("NetworkType:"+mapNetworkTypeToName(tm.getNetworkType()));
view=(TextView)findViewById(R.id.phone_type);
view.setText("PhoneType:"+mapDeviceTypeToName(tm.getPhoneType()));
view=(TextView)findViewById(R.id.network_name);
view.setText("NetworkOperator:"+tm.getNetworkOperatorName());
}
/**
*ReturnsastringdescribingthecurrentSIMstate.
*/
privatestaticStringmapSimStateToName(intsimState){
switch(simState){
caseTelephonyManager.SIM_STATE_ABSENT:
returnSIM_ABSENT;
caseTelephonyManager.SIM_STATE_READY:
returnSIM_READY;
caseTelephonyManager.SIM_STATE_PIN_REQUIRED:
returnSIM_PIN_REQUIRED;
caseTelephonyManager.SIM_STATE_PUK_REQUIRED:
returnSIM_PUK_REQUIRED;
caseTelephonyManager.SIM_STATE_NETWORK_LOCKED:
returnSIM_NETWORK_LOCKED;
caseTelephonyManager.SIM_STATE_UNKNOWN:
returnSIM_UNKNOWN;
default:
//shouldn'thappen.
returnnull;
}
}
/**
*Returnsastringindicatingthephoneradiotype.
*/
privatestaticStringmapDeviceTypeToName(intdevice){
switch(device){
caseTelephonyManager.PHONE_TYPE_CDMA:
returnPHONE_CDMA;
caseTelephonyManager.PHONE_TYPE_GSM:
returnPHONE_GSM;
caseTelephonyManager.PHONE_TYPE_SIP:
returnPHONE_SIP;
caseTelephonyManager.PHONE_TYPE_NONE:
returnPHONE_NONE;
default:
//shouldn'thappen.
returnnull;
}
}
/**
*Returnsastringdescribingthenetworktype.
*/
publicstaticStringmapNetworkTypeToName(intnetworkType){
switch(networkType){
caseTelephonyManager.NETWORK_TYPE_CDMA:
returnNETWORK_CDMA;
caseTelephonyManager.NETWORK_TYPE_EDGE:
returnNETWORK_EDGE;
caseTelephonyManager.NETWORK_TYPE_GPRS:
returnNETWORK_EDGE;
caseTelephonyManager.NETWORK_TYPE_UMTS:
returnNETWORK_UMTS;
caseTelephonyManager.NETWORK_TYPE_EVDO_0:
returnNETWORK_EVDO_0;
caseTelephonyManager.NETWORK_TYPE_EVDO_A:
returnNETWORK_EVDO_A;
caseTelephonyManager.NETWORK_TYPE_EVDO_B:
returnNETWORK_EVDO_B;
caseTelephonyManager.NETWORK_TYPE_1xRTT:
returnNETWORK_1X_RTT;
caseTelephonyManager.NETWORK_TYPE_HSDPA:
returnNETWORK_HSDPA;
caseTelephonyManager.NETWORK_TYPE_HSPA:
returnNETWORK_HSPA;
caseTelephonyManager.NETWORK_TYPE_HSUPA:
returnNETWORK_HSUPA;
caseTelephonyManager.NETWORK_TYPE_IDEN:
returnNETWORK_IDEN;
caseTelephonyManager.NETWORK_TYPE_LTE:
returnNETWORK_LTE;
caseTelephonyManager.NETWORK_TYPE_EHRPD:
returnNETWORK_EHRPD;
//caseTelephonyManager.NETWORK_TYPE_HSPAP:
//returnNETWORK_HSPAP;
caseTelephonyManager.NETWORK_TYPE_UNKNOWN:
default:
returnNETWORK_UNKOWN;
}
}
}
//main.xml
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextViewandroid:id="@+id/phone_type"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<TextViewandroid:id="@+id/network_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<TextViewandroid:id="@+id/sim_state"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<TextViewandroid:id="@+id/network_type"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
更多相关文章
- 代码中设置drawableleft
- android 3.0 隐藏 系统标题栏
- Android开发中activity切换动画的实现
- Android(安卓)学习 笔记_05. 文件下载
- Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
- 技术博客汇总
- android 2.3 wifi (一)
- AndRoid Notification的清空和修改
- Android中的Chronometer