系统Camera和第三方Camera APP 打开Camera时,都能在Camera2ClientBase.cpp中检测到,并且还能看到是哪个APP打开的。
frameworks/av/services/camera/libcameraservice/common/Camera2ClientBase.cpp
//Camera open
Camera2ClientBase<TClientBase>::Camera2ClientBase(
const sp<CameraService>& cameraService,
const sp<TCamCallbacks>& remoteCallback,
const String16& clientPackageName,
const String8& cameraId,
int api1CameraId,
int cameraFacing,
int clientPid,
uid_t clientUid,
int servicePid):
TClientBase(cameraService, remoteCallback, clientPackageName,
cameraId, api1CameraId, cameraFacing, clientPid, clientUid, servicePid),
mSharedCameraCallbacks(remoteCallback),
mDeviceVersion(cameraService->getDeviceVersion(TClientBase::mCameraIdStr)),
mDeviceActive(false), mApi1CameraId(api1CameraId)
{
ALOGI("Camera %s: Opened. Client: %s (PID %d, UID %d)", cameraId.string(),
String8(clientPackageName).string(), clientPid, clientUid);
**// add
const char* mCameraId = "0";
const char* mSystemCamera = "com.mediatek.camera";
if(strcmp(String8(clientPackageName).string(),mSystemCamera) != 0){
if(strcmp(cameraId.string(),mCameraId) == 0){
ALOGI("open cameraid %s ,persist.sys.opencamera = true",cameraId.string());
property_set("persist.sys.opencamera", "true");
}else{
ALOGI("open cameraid %s ,persist.sys.opencamera = false",cameraId.string());
property_set("persist.sys.opencamera", "false");
}
}
//end**
mInitialClientPid = clientPid;
mDevice = new Camera3Device(cameraId);
LOG_ALWAYS_FATAL_IF(mDevice == 0, "Device should never be NULL here.");
}
//Camera close
template <typename TClientBase>
Camera2ClientBase<TClientBase>::~Camera2ClientBase() {
ATRACE_CALL();
TClientBase::mDestructionStarted = true;
disconnect();
**// add
const char* mSystemCamera = "com.mediatek.camera";
if(strcmp(String8(TClientBase::mClientPackageName).string(),mSystemCamera) != 0){
ALOGI("clsoe cameraid %s ,persist.sys.opencamera = false",TClientBase::mCameraIdStr.string());
property_set("persist.sys.opencamera", "false");
}
// end**
ALOGI("Closed Camera %s. Client was: %s (PID %d, UID %u)",
TClientBase::mCameraIdStr.string(),
String8(TClientBase::mClientPackageName).string(),
mInitialClientPid, TClientBase::mClientUid);
}