【android 12】【app】设备状态变化感知

一、概述

1.设备状态改变时,关注的对象需要能感知到这种变化,才能做相应的响应。可以通过监听、回调、轮询、广播等方式来感知。

二、监听

1.通过监听SettingsProvider中的值,感知设备状态变化

diff --git a/frameworks/base/services/java/com/android/server/AnkerLarkCameraManagerService.java b/frameworks/base/services/java/com/android/server/AnkerLarkCameraManagerService.java
index e511d9d27ea..fb740142c89 100755
--- a/frameworks/base/services/java/com/android/server/AnkerLarkCameraManagerService.java
+++ b/frameworks/base/services/java/com/android/server/AnkerLarkCameraManagerService.java
@@ -24,23 +24,41 @@ import rockchip.hardware.larkcamera.V1_0.ILarkCamera;
 import rockchip.hardware.larkcamera.V1_0.PTZData;
 import rockchip.hardware.ankeraudio.V1_0.IAnkerAudio;
 import com.android.server.anker.utils.FileUtil;
+import android.provider.Settings;
+import android.database.ContentObserver;
+import android.os.Handler;
+import android.os.Looper;
+import android.net.Uri;
+import android.content.ContentResolver;
 
 public class AnkerLarkCameraManagerService extends LarkCameraManagerService {
-    private static final String TAG = "AnkerLarkCameraManagerService ison";
+    private static final String TAG = "AnkerLarkCameraManagerService";
 
     private CameraManager cameraManager;
     private ICameraListener cameraListener;
-
+    public  String KEY_CAMERA_MODE = "cameraMode";
+    Context mContext;
+    private CameraModeObserver mCameraModeObserver;
+    private ContentResolver mContentResolver;
     public AnkerLarkCameraManagerService(Context context) {
         super(context);
+        mContext = context;
         cameraManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
-
+        long ident = Binder.clearCallingIdentity();
+        mContentResolver = mContext.getContentResolver();
+        mCameraModeObserver = new CameraModeObserver(mContext,cameraListener);
+        mContentResolver.registerContentObserver(Settings.Global.getUriFor(KEY_CAMERA_MODE),true,mCameraModeObserver);
+        Binder.restoreCallingIdentity(ident);
     }
 
     @Override
     public boolean setCameraListener(ICameraListener listener) {
         Log.d(TAG, "setAudioListener");
         cameraListener = listener;
+        if(mCameraModeObserver != null){
+            Log.d(TAG, "setAudioListener mCameraModeObserver");
+            mCameraModeObserver.setCameraListener(cameraListener);
+        }
         return true;
     }
 
@@ -107,20 +125,24 @@ public class AnkerLarkCameraManagerService extends LarkCameraManagerService {
:
-
+    public  String KEY_CAMERA_MODE = "cameraMode";
+    Context mContext;
+    private CameraModeObserver mCameraModeObserver;
+    private ContentResolver mContentResolver;
     public AnkerLarkCameraManagerService(Context context) {
         super(context);
+        mContext = context;
         cameraManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
-
+        long ident = Binder.clearCallingIdentity();
+        mContentResolver = mContext.getContentResolver();
+        mCameraModeObserver = new CameraModeObserver(mContext,cameraListener);
+        mContentResolver.registerContentObserver(Settings.Global.getUriFor(KEY_CAMERA_MODE),true,mCameraModeObserver);
+        Binder.restoreCallingIdentity(ident);
     }
 
     @Override
     public boolean setCameraListener(ICameraListener listener) {
         Log.d(TAG, "setAudioListener");
         cameraListener = listener;
+        if(mCameraModeObserver != null){
+            Log.d(TAG, "setAudioListener mCameraModeObserver");
+            mCameraModeObserver.setCameraListener(cameraListener);
+        }
         return true;
     }
 
@@ -107,20 +125,24 @@ public class AnkerLarkCameraManagerService extends LarkCameraManagerService {
     public boolean setFramingMode(String cameraId, int mode) {
         Log.d(TAG, "setFramingMode start");
         cameraId = validateCameraId(cameraId);
+        long ident = Binder.clearCallingIdentity();
         try {
             ILarkCamera service = ILarkCamera.getService(true);
             int oldMode = service.getFramingMode(cameraId);
-            service.setFramingMode(cameraId, mode);
             if (oldMode != mode) {
+                Log.d(TAG, "setFramingMode oldMode != mode");
+                service.setFramingMode(cameraId, mode);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值