作者原文连接,转载请注明:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=74662
谢谢合作!
TelephonyManager与android.provider.Settings.System的应用
我们在前面的范例当中,已经示范过如何通过TelephonyManager(android.telephony. TelephonyManager)对象来取得SIM卡状态及相关信息,除了SIM卡信息外,TelephonyManager还可以用来取得电信网络的相关信息。例如,电信网络国别、电信公司代码、电信公司名称、网络类型等,甚至还可以取得每部手机唯一的IMEI码与IMSI码。
除此之外,如果要取得手机内的设置值,如蓝牙、无线网络的设置状态,还可以通过Android API提供的android.provider.Settings.System对象来取得。
本范例将示范如何运用TelephonyManager取得目前的电信网络相关信息,以及如何运用android.provider.Settings.System来取得手机的相关信息与设置。
程序中以getSystemService(TELEPHONY_SERVICE)来取得TelephonyManager对象,再通过TelephonyManager提供的方法来取得电信网络相关信息。
另外,程序以android.provider.Settings.System.getString()来取得手机相关设置信息,并将取得的信息存入自定义的MyAdapter中,最后以setListAdapter()将MyAdapter内的信息显示在ListView中。
import android.content.ContentResolver;
import android.telephony.TelephonyManager;
public class EX05_24 extends ListActivity {
private TelephonyManager telMgr; private List<String> item=new ArrayList<String>();
private List<String> value=new ArrayList<String>();
@SuppressWarnings("static-access")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/* 加载main.xml Layout */
setContentView(R.layout.main);
telMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
/* 将取得的信息写入List中 */
/* 取得手机电话号码 */
item.add(getResources().getText(R.string.str_list0).toString());
if(telMgr.getLine1Number()!=null) {
value.add(telMgr.getLine1Number());
} else {
value.add("无法取得");
}
/* 取得电信网络国别 */
item.add(getResources().getText(R.string.str_list1).toString());
if(telMgr.getNetworkCountryIso().equals("")) {
value.add("无法取得");
} else {
value.add(""+telMgr.getNetworkCountryIso());
}
/* 取得电信公司代码 */
item.add(getResources().getText(R.string.str_list2).toString());
if(telMgr.getNetworkOperator().equals("")) {
value.add("无法取得");
} else {
value.add(telMgr.getNetworkOperator());
}
/* 取得电信公司名称 */
item.add(getResources().getText(R.string.str_list3).toString());
if(telMgr.getNetworkOperatorName().equals("")) {
value.add("无法取得");
} else {
value.add(telMgr.getNetworkOperatorName());
}
/* 取得移动通信类型 */
item.add(getResources().getText(R.string.str_list4).toString());
if(telMgr.getPhoneType()==telMgr.PHONE_TYPE_GSM) {
value.add("GSM");
} else {
value.add("未知");
}
/* 取得网络类型 */
item.add(getResources().getText(R.string.str_list5).toString());
if(telMgr.getNetworkType()==telMgr.NETWORK_TYPE_EDGE) {
value.add("EDGE");
} else if(telMgr.getNetworkType()==telMgr.NETWORK_TYPE_GPRS) {
value.add("GPRS");
} else if(telMgr.getNetworkType()==telMgr.NETWORK_TYPE_UMTS) {
value.add("UMTS");
} else if(telMgr.getNetworkType()==4) {
value.add("HSDPA");
} else { value.add("未知");
}
/* 取得漫游状态 */
item.add(getResources().getText(R.string.str_list6).toString());
if(telMgr.isNetworkRoaming()) {
value.add("漫游中");
} else{
value.add("无漫游");
}
/* 取得手机IMEI */
item.add(getResources().getText(R.string.str_list7).toString());
value.add(telMgr.getDeviceId());
/* 取得IMEI SV */
item.add(getResources().getText(R.string.str_list8).toString());
if(telMgr.getDeviceSoftwareVersion()!=null) {
value.add(telMgr.getDeviceSoftwareVersion());
} else {
value.add("无法取得");
}
/* 取得手机IMSI */
item.add(getResources().getText(R.string.str_list9).toString());
if(telMgr.getSubscriberId()!=null) {
value.add(telMgr.getSubscriberId());
} else {
value.add("无法取得");
}
/* 取得ContentResolver */
ContentResolver cv = EX05_24.this.getContentResolver();
String tmpS="";
/* 取得蓝牙状态 */
item.add(getResources().getText(R.string.str_list10) .toString()); tmpS=android.provider.Settings.System.getString(cv, android.provider.Settings.System.BLUETOOTH_ON);
if(tmpS.equals("1")) {
value.add("已打开");
} else{
value.add("未打开");
}
/* 取得WIFI状态 */
item.add(getResources().getText(R.string.str_list11) .toString()); tmpS=android.provider.Settings.System.getString(cv, android.provider.Settings.System.WIFI_ON); if(tmpS.equals("1")) {
value.add("已打开");
} else{
value.add("未打开");
}
/* 取得飞行模式是否打开 */
item.add(getResources().getText(R.string.str_list12) .toString()); tmpS=android.provider.Settings.System.getString(cv, android.provider.Settings.System.AIRPLANE_MODE_ON);
if(tmpS.equals("1")) {
value.add("打开中");
} else{
value.add("未打开");
}
/* 取得数据漫游是否打开 */
item.add(getResources().getText(R.string.str_list13) .toString()); tmpS=android.provider.Settings.System.getString(cv, android.provider.Settings.System.DATA_ROAMING);
if(tmpS.equals("1")) {
value.add("打开中");
} else{
value.add("未打开");
}
/* 使用自定义的MyAdapter来将数据传入ListActivity */
setListAdapter(new MyAdapter(this,item,value));
}
}
其中getString()传入的第二个参数是想要取得的设置值的名称,可以直接使用API中已经定义好的常数传入。除了范例中提到的蓝牙状态、无线网络状态、飞行模式、数据漫游状态之外,还有更多的手机设置值可以取得,比如说,设置的信息提示声音、设置的铃声等,表5-11所示列举几个Android.provider.Settings.System中的常数供大家参考。