zoukankan      html  css  js  c++  java
  • Android------------------系统服务调用的学习

    一、ServiceManager的方法: 此方法getService,用于根据名称获取当前的IBinder的代理(并没有直接获取服务),

                  服务提供的功能是依靠IBinder间接调用的(返回值IBinder)

     // 在真机的环境中是有此类: android.os.ServiceManager 因此我们可以采用Java反射机制来获取
     Class clazz = Class.forName("android.os.ServiceManager");
     Method method = clazz.getMethod("getService", String.class);
     // 系统注册的服务都可以在Context中查看
     IBinder iBinder = (IBinder) method.invoke(null,
     Context.TELEPHONY_SERVICE);
     // 获取系统提供的ITelephony服务

     //它binderService哪个服务,通过serviceConnect就可以回传得到,telephony就会得到回传的那个服务
     ITelephony telephony = (ITelephony) ITelephony.Stub.asInterface(iBinder);  

    二、Content.getSystemService : 是用来获取服务管理器(不是服务),对服务的监听,符合事件的处理

                   都要通过服务管理器完成的,系统默认管理器(返回相应的服务管理器的对象)

      

      // TelephonyManager:是Telephony服务的管理类.
      tm = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);

    三、打电话经常用到的两个文件

      1.TelephoneManager : 是Telephony服务的管理类.

      2.PhoneStateListener : 手机监听状态

      电话的大致流程:  

      //获得当前的Telephony服务的管理类

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

      //启动对Telephony的监听

      tm.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);  

      private PhoneStateListener phoneStateListener = new PhoneStateListener() {

      @Override
      // 当手机电话的状态发生变化,则此方法会调用
      public void onCallStateChanged(int state, String incomingNumber) {
      switch (state) {
      case TelephonyManager.CALL_STATE_IDLE:
      Log.i("jxy", "空闲.........");
      break;
      case TelephonyManager.CALL_STATE_RINGING:
      Log.i("jxy", "响铃.........");
      if (incomingNumber.equals("110")) {
      endCall();
      }
      break;
      default:
      Log.i("jxy", "接通.........");
      break;
        }
      }

    };

    四、调用系统服务的一些注意事项

      1.不能在Activity中去注册系统服务,这样下次启动服务的时候会重复注册。

       应该用我们自己的服务去调用系统的服务,应该使用startService,不能使用

       binderService。因为使用binderService,Activity销毁的时候就会解绑,通话就会断开

      

  • 相关阅读:
    Verilog杂谈
    Hadoop家族学习路线图
    R语言中apply函数
    R语言数组array函数
    R语言列表list函数
    R语言多元素向量
    R语言提取字符串的一部分substring函数
    R语言改变大小写 toupper()和 tolower()函数
    R语言统计字符串的字符数ncahr函数
    R语言格式化数字和字符串format函数
  • 原文地址:https://www.cnblogs.com/liunx1109/p/9906634.html
Copyright © 2011-2022 走看看