android中getSystemService详解

本文详细介绍了Android系统中通过getSystemService方法可访问的核心服务及其应用场景,包括窗口管理、电源管理、位置服务等,并提供了获取手机信息的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



    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 StringgetPhoneNumber()

      {

            //获取手机号 MSISDN,很可能为空

            TelephonyManager tm =(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

            StringBufferinf = new StringBuffer();

            switch(tm.getSimState()){//getSimState()取得sim的状态  有下面6中状态 

                    caseTelephonyManager.SIM_STATE_ABSENT :inf.append("无卡");returninf.toString();  

                   caseTelephonyManager.SIM_STATE_UNKNOWN :inf.append("未知状态");returninf.toString(); 

                  caseTelephonyManager.SIM_STATE_NETWORK_LOCKED:inf.append("需要NetworkPIN解锁");return inf.toString(); 

                   caseTelephonyManager.SIM_STATE_PIN_REQUIRED:inf.append("需要PIN解锁");return inf.toString(); 

                   caseTelephonyManager.SIM_STATE_PUK_REQUIRED:inf.append("需要PUK解锁");return inf.toString(); 

                  caseTelephonyManager.SIM_STATE_READY :break; 

      }

 

      String phoneNumber =tm.getLine1Number();

      returnphoneNumber;

}


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


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

 

于是:

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

public BasicInfo (Context context)

{

      this.context =context;

}

 

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

context.getSystemService(Context.TELEPHONY_SERVIC);

 

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

bi.getPhoneNumber();


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值