一、概述
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);