• 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销毁的时候就会解绑,通话就会断开

      

  • 相关阅读:
    Matlab中imagesc用法
    codevs 3160 最长公共子串(SAM)
    spoj 7258 SUBLEX(SAM,名次)
    spoj 1812 LCS2(SAM+DP)
    spoj 8222 Substrings(后缀自动机+DP)
    tyvj P1519 博彩游戏(AC自动机+DP滚动数组)
    bzoj 1030 [JSOI2007]文本生成器(AC自动机+DP)
    vijos P1459 车展(Treap,中位数)
    bzoj 3196 Tyvj 1730 二逼平衡树(线段树套名次树)
    bzoj 1483 [HNOI2009]梦幻布丁(链表+启发式合并)
  • 原文地址:https://www.cnblogs.com/liunx1109/p/9906634.html
Copyright © 2020-2023  润新知