admin管理员组

文章数量:1666897

//申请hidl_death_recipient的子类

struct CameraPolicyServiceClient: 
        virtual public hardware::hidl_death_recipient
    {
        CameraPolicyServiceClient(sp<hardware::camera::device::V1_0::ICameraDevice> &interface);
        ~CameraPolicyServiceClient();
        status_t initialize();
        // hidl_death_recipient interface - this locks the parent mInterfaceMutex
        virtual void serviceDied(uint64_t cookie, const wp<hidl::base::V1_0::IBase>& who) override;
        const sp<hardware::camera::device::V1_0::ICameraDevice>  mInterface;
    }

//重写它的 serviceDied() 方法。

//实例化一个 hidl_death_recipient 子类对象。

CameraHardwareInterface::CameraPolicyServiceClient::CameraPolicyServiceClient(
    sp<hardware::camera::device::V1_0::ICameraDevice> &interface) :
        mInterface(interface){

}
void CameraHardwareInterface::CameraPolicyServiceClient::serviceDied(uint64_t cookie,
        const wp<hidl::base::V1_0::IBase>& who) {
    (void) who;
   //... do something,cookie可以自定义,只要和linkToDeath保持一致就行
    ALOGW("%s: Unexpected serviceDied cookie %" PRIu64 "" ,__FUNCTION__, cookie);
}
status_t CameraHardwareInterface::CameraPolicyServiceClient::initialize() {
  //调用服务的方法 linkToDeath() 给监视器,传入 IDeathRecipient 的接口对象。
    hardware::Return<bool> linked = mInterface->linkToDeath(this,0);
    ALOGE(" CameraPolicyServiceClient::initialize");
    if (!linked.isOk()) {   
        ALOGE("%s: Transaction error in linking to ",__FUNCTION__);
    } else if (!linked) {
        ALOGE("%s: Unable to linkToDeath",__FUNCTION__);
    }
    return OK;
}
CameraHardwareInterface::CameraPolicyServiceClient::~CameraPolicyServiceClient(){
}

google 的介绍: https://source.android.google/devices/architecture/hidl/services

本文标签: 实例通知HIDLhidldeathrecipient