ICamerService.cpp文件
// connect to camera service (android.hardware.Camera)
virtual status_t connect(const sp<ICameraClient>& cameraClient, int cameraId,
const String16 &clientPackageName, int clientUid,
/*out*/
sp<ICamera>& device)
{
Parcel data, reply;
data.writeInterfaceToken(ICameraService::getInterfaceDescriptor());
data.writeStrongBinder(IInterface::asBinder(cameraClient));
data.writeInt32(cameraId);
data.writeString16(clientPackageName);
data.writeInt32(clientUid);
status_t status;
status = remote()->transact(BnCameraService::CONNECT, data, &reply);
if (status != OK) return status;
if (readExceptionCode(reply)) return -EPROTO;
status = reply.readInt32();
if (reply.readInt32() != 0) {
device = interface_cast<ICamera>(reply.readStrongBinder());
}
return status;
}
再看IInterface.h文件
扩展开来就是下面
android::sp<ICamera> ICamera::asInterface(
const android::sp<android::IBinder>& obj)
{
android::sp<ICamera> intr;
if (obj != NULL) {
intr = static_cast<ICamera*>(
obj->queryLocalInterface(
ICamera::descriptor).get());
if (intr == NULL) {
intr = new BpCamera(obj);
}
}
return intr;
}