android中getSystemService详解

android的后台运行在很多service,它们在系统启动时被SystemServer开启,支持系统的正常工作,比如 MountService监听是否有SD卡安装及移除,ClipboardService提供剪切板功能,PackageManagerService提 供软件包的安装移除及查看等等,应用程序可以通过系统提供的Manager接口来访问这些Service提供的数据。

 
    getSystemService是Android很重要的一个API,它是Activity的一个方法,根据传入的NAME来取得对应的Object,然后转换成相应的服务对象。以下介绍系统相应的服务。
 
           传入的Name           |           返回的对象              |         说明
  • WINDOW_SERVICE                      WindowManager                    管理打开的窗口程序
  • LAYOUT_INFLATER_SERVICE             LayoutInflater                   取得xml里定义的view
  • ACTIVITY_SERVICE                    ActivityManager                  管理应用程序的系统状态
  • POWER_SERVICE                       PowerManger                      电源的服务
  • ALARM_SERVICE                       AlarmManager                     闹钟的服务
  • NOTIFICATION_SERVICE                NotificationManager              状态栏的服务
  • KEYGUARD_SERVICE                    KeyguardManager                  键盘锁的服务
  • LOCATION_SERVICE                    LocationManager                  位置的服务,如GPS
  • SEARCH_SERVICE                      SearchManager                    搜索的服务
  • VEBRATOR_SERVICE                    Vebrator                         手机震动的服务
  • CONNECTIVITY_SERVICE                Connectivity                     网络连接的服务
  • WIFI_SERVICE                        WifiManager                      Wi-Fi服务
  • TELEPHONY_SERVICE                   TeleponyManager                  电话服务

     

一个例子:

在android 获取手机信息的时候用到这样一段代码:

public class BasicInfo {
        public String getPhoneNumber()
        {
                // 获取手机号 MSISDN,很可能为空
                TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
                StringBuffer inf = new StringBuffer();
                switch(tm.getSimState()){ //getSimState()取得sim的状态  有下面6中状态  
                        case TelephonyManager.SIM_STATE_ABSENT :inf.append("无卡");return inf.toString();   
                        case TelephonyManager.SIM_STATE_UNKNOWN :inf.append("未知状态");return inf.toString(); 
                        case TelephonyManager.SIM_STATE_NETWORK_LOCKED :inf.append("需要NetworkPIN解锁");return inf.toString();  
                        case TelephonyManager.SIM_STATE_PIN_REQUIRED :inf.append("需要PIN解锁");return inf.toString();  
                        case TelephonyManager.SIM_STATE_PUK_REQUIRED :inf.append("需要PUK解锁");return inf.toString();  
                        case TelephonyManager.SIM_STATE_READY :break;  
        }
        String phoneNumber = tm.getLine1Number();
        return phoneNumber;
}

 



在另外一个activity类里面调用的时候 总是出现进程关闭 无法获取手机信息。后来发现

getSystemService这个方法基于context,只有存在TextView控件的窗体中这个方法才会被激活~

 

于是:

1. 给BasicInfo 添加一个带参数Context的构造函数:

public BasicInfo (Context context)

{

        this.context = context;

}

 

2. getPhoneNumber()函数里面改成:

context.getSystemService(Context.TELEPHONY_SERVIC);

 

3. 在调用类里面 BasicInfo bi = new BasicInfo(this);

bi.getPhoneNumber();

posted @ 2014-07-15 09:29  无名盗闪  阅读(390)  评论(0)    收藏  举报