安卓硬件访问服务

JNI直接访问

安卓硬件访问服务_第1张图片
1 安卓应用程序通过加载 c库 来访问硬件服务程序
2 安卓 app 通过 loadlibrary 加载 c库
3 一旦c库被加载 JNI_Onload 函数就会被调用,通过jniRegisterNativeMethods 对方法进行调用
4 app 使用 方法调用 硬件

使用服务

安卓硬件访问服务_第2张图片
安卓硬件访问服务_第3张图片

extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved)
{
     
    JNIEnv* env = NULL;
    jint result = -1;

    if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
     
        ALOGE("GetEnv failed!");
        return result;
    }
    ALOG_ASSERT(env, "Could not retrieve the env!");

    register_android_server_PowerManagerService(env);
    register_android_server_SerialService(env);
    register_android_server_InputApplicationHandle(env);
    register_android_server_InputWindowHandle(env);
    register_android_server_InputManager(env);
    register_android_server_LightsService(env);
    register_android_server_AlarmManagerService(env);
    register_android_server_UsbDeviceManager(env);
    register_android_server_UsbHostManager(env);
    register_android_server_VibratorService(env);
    register_android_server_SystemServer(env);
    register_android_server_location_GpsLocationProvider(env);
    register_android_server_location_FlpHardwareProvider(env);
    register_android_server_connectivity_Vpn(env);
    register_android_server_AssetAtlasService(env);
    register_android_server_ConsumerIrService(env);
    register_android_server_BatteryStatsService(env);
    register_android_server_hdmi_HdmiCecController(env);
    register_android_server_tv_TvInputHal(env);
    register_android_server_PersistentDataBlockService(env);
    register_android_server_fingerprint_FingerprintService(env);
    register_android_server_Watchdog(env);

    return JNI_VERSION_1_4;
}

你可能感兴趣的:(安卓)