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

      

  • 相关阅读:
    【转】Eclipse插件开发之基础篇(1) 插件开发的基础知识
    js获取周.html
    Go语言 基础
    MySQL replace into
    元认知:思考“何为思考”
    redis 流水线
    关于Blog现象的一些思考。
    [LCS]LCS2005服务器应用程序
    [WAP]dotNet在WAP应用开发中实现按指定页数翻页的解决方案
    [Cache]深入学习Enterprise Library for .NET Framework 2.0的Cache机制——分析篇
  • 原文地址:https://www.cnblogs.com/liunx1109/p/9906634.html
Copyright © 2011-2022 走看看