android之插拔外设launcher小图标动态显示

来源:互联网 发布:但丁捏脸数据 编辑:程序博客网 时间:2024/05/01 15:28

       当我们的设备插拔外设的时候,需要在UI上动态显示图标。比如,手机插入耳机会在UI上方显示耳机的小图标。

       以下我们以camera设备为例:

       系统会有一个CameraObserver服务,这个服务一直在后台跑用来监听kernel的Event事件

       关于EventObserver.java是如何监听kernel的Event事件请参考

       http://blog.csdn.net/darkengine/article/details/7442359

       点击打开链接

       CameraObserver.java监听到kernel的Event事件后做出处理:

            if(event.get("ACTION").equals("add")){                    Intent intent = new Intent(DeviceManagerEvent.Intent.ACTION_CAMERA_PLUG_IN);                    mContext.sendBroadcast(intent);//发送广播                    mCameraList.put(event.get("DEVNAME",""), event.get("SUBSYSTEM",""));             }             else{    Intent intent = new Intent(DeviceManagerEvent.Intent.ACTION_CAMERA_PLUG_OUT);   mContext.sendBroadcast(intent);   mCameraList.remove(event.get("DEVNAME",""));             }
       广播发出了,那么就需要launcher来接受广播显示小图标:CameraStatusbarBroadcast.java  
 @Overridepublic int onReceiverBroadCast(String action) {// TODO Auto-generated method stubif (DeviceManagerEvent.Intent.ACTION_CAMERA_PLUG_IN.equals(action)) {return 0;} else if (DeviceManagerEvent.Intent.ACTION_CAMERA_PLUG_OUT.equals(action)) {return 1;}return -1;}
      一切准备就绪,那么如何启动CameraObserver服务?

      frameworks\base\services\java\com\android\server\SystemServer.java

       import android.server.CameraObserver       public void initAndLoop() {           try {                   Slog.i(TAG, "Camera Observer");                   // Listen for Camera changes                   Camera = new android.server.CameraObserver(context);                   } catch (Throwable e) {                   Slog.e(TAG, "Failure starting CameraObserver", e);               }             }
      这样在系统起来的时候,systemserver就会去启动CameraObserver服务,这个服务去监听摄像头热插拔事件,从而发送广使launcher动态显示小图标。

0 0
原创粉丝点击