当前位置:   article > 正文

getSystemService()详解_getsystemservice()

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                  电话服务
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

一个例子:
在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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

}

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

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

于是:

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

    public BasicInfo (Context context)
    
    {
    
    this.context = context;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  2. getPhoneNumber()函数里面改成:

    context.getSystemService(Context.TELEPHONY_SERVIC);
    
    • 1
  3. 在调用类里面 BasicInfo bi = new BasicInfo(this);

    bi.getPhoneNumber();
    
    • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/588986
推荐阅读
相关标签
  

闽ICP备14008679号