Red de conocimiento informático - Material del sitio web - Cómo usar adhesivo en Android

Cómo usar adhesivo en Android

Para implementar una instancia de comunicación de carpeta, debe seguir los siguientes pasos:

(1) Obtener la referencia de objeto de ServiceManager

(2) Registrar un nuevo servicio con ServiceManager

(3) Obtener la referencia del objeto de servicio en el cliente a través de ServiceManager

(3) Enviar la solicitud en el cliente y dejar que el servicio devuelva el resultado. Referencia del objeto de servicio

(3) Envíe una solicitud en el cliente y deje que el servicio devuelva el resultado.

Consulte la implementación del código específico a continuación.

3.1 Implementación del código libmyservice

(1) Cree un nuevo directorio frameworks/base/myservice/libservice e ingrese al directorio

vista simple

$ cd frameworks/base

$ mkdir miservicio

$ cd miservicio

$ mkdir libmyservice

$ cd libmyservice

(2) Escriba el archivo libmyservice/myservic.h

(3) Copie el archivo libmyservice/myservic.h al archivo libmyservice/myservic.h.

h archivo

ver plano

#include lt;utils/threads.hgt;

#include lt;utils/RefBase.hgt;

#include lt;binder/IInterface.hgt;

#include lt;binder/BpBinder.hgt;

#include lt;binder/Parcel.hgt;

espacio de nombres android {

clase MyService: BBinder público

{

Mutex mlock mutable;

int32_t mNextConnId;

público:

static int instanciate();

MiServicio();

virtual ~MiServicio();

virtual status_t onTransact(uint32_t, const Parcelamp;, Parcel*, uint32_t

};

} //espacio de nombres

(2) Escribir libservice/ archivo myservice.cpp

(3) Escribir archivo libservice/myservice.cpp

(4) Escribir archivo libservice/myservice.cpp

(5) Escribir libservice /archivo myservice.cpp

(6) Escriba el archivo libservice/myservice.cpp #include lt;binder/IPCThreadState.hgt;

espacio de nombres android {

estático struct sigaction oldact;

static pthread_key_t sigbuskey;

int MyService::instantiate()

{

LOGE("MyService instanciar"

//defaultServiceManager () obtiene la referencia del objeto de ServiceManager, addService() registra un nuevo servicio con ServiceManager

int r = defaultServiceManager()-gt; "android .myservice"), new MyService());

LOGE("MyService r = d/n", r);

return r;

}

MiServicio::MiServicio()

{

LOGV("MiServicio creado");

mNextConnId = 1;

pthread_key_create(amp; sigbuskey, NULL);

}

MiServicio::~MiServicio

( )

{

pthread_key_delete(sigbuskey);

LOGV("Mi servicio destruido");

}

// Cada servicio del sistema hereda de la clase BBinder y debe anular la función virtual onTransact de BBinder.

Cuando el usuario envía una solicitud al servicio, el marco del sistema llamará a la función onTransact del servicio, que analizará el paquete de datos recibido y llamará a la función de interfaz correspondiente para procesar la solicitud

status_t MyService:: onTransact(código uint32_t, datos const Parcelamp;, respuesta de Parcel*, indicadores uint32_t)

{

switch(código)

{

caso 0: {

pid_t pid = data.readInt32();

int num = data.readInt32()

num = num 100; p>respuesta -gt; writeInt32(num);

return NO_ERROR;

}

interrupción

Predeterminado:

return BBinder::onTransact(código, datos, respuesta, banderas);

}

}

}

}

}; //espacio de nombres

(3) Escribir archivo libservice/Android .mk

ver plano

# Archivo: Android .mk

LOCAL_PATH:= $(call my-dir)

Incluye $(CLEAR_VARS)

LOCAL_SRC_FILES:= myservice.cpp

LOCAL_C_INCLUDES: = $(JNI_H_INCLUDE)

LOCAL_SHARED_LIBRARIES := libutils libbinder

LOCAL_MODULE_TAGS := opcional

LOCAL_PRELINK_MODULE := falso

LOCAL_MODULE := libmyservice

incluir $(BUILD_SHARED_LIBRARY)

(4) Compile la biblioteca dinámica libmyservice.so

En el directorio principal de origen de Android

Ver texto puro

$ source build/envsetup.sh

incluido dispositivo/htc/passion/vendorsetup.sh

incluido dispositivo/samsung/crespo4g/vendorsetup .sh

incluido dispositivo/samsung/crespo/vendorsetup.sh

$ mmm frameworks/base/myservice/libmyservice/

Archivo generado después de una compilación exitosa: out /target/product/generic/system/lib/libmyservice.so