<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                根據前面的分析,PMS有時需要進行點亮屏幕,打開鍵盤燈等操作,為此Android提供了Power類及LightService滿足PMS的要求。這兩個類比較簡單,但是其背后的Kernel層相對復雜一些。本章僅分析用戶空間的內容,有興趣的讀者不妨以此為入口,深入研究Kernel層的實現。 1. Power類介紹 Power類提供了6個函數,如下所示: **Power.java** ~~~ int setScreenState(boolean on);//打開或關閉屏幕光 int setLastUserActivityTimeout(long ms);//設置超時時間 void reboot(String reason);//用于手機重啟,內部調用rebootNative void shutdown();//已作廢,建議不要調用 void acquireWakeLock(int lock, String id);//獲取Kernel層的WakeLock void releaseWakeLock(String id);//釋放Kernel層的WakeLock ~~~ 這些函數固有的實現代碼如下: **android_os_Power.cpp** ~~~ static void acquireWakeLock(JNIEnv *env, jobjectclazz, jint lock, jstring idObj) { ...... constchar *id = env->GetStringUTFChars(idObj, NULL); acquire_wake_lock(lock, id);//調用此函數和Kernel層交互 env->ReleaseStringUTFChars(idObj, id); } static void releaseWakeLock(JNIEnv *env, jobjectclazz, jstring idObj) { constchar *id = env->GetStringUTFChars(idObj, NULL); release_wake_lock(id);//釋放Kernel層的WakeLock env->ReleaseStringUTFChars(idObj,id); } static int setLastUserActivityTimeout(JNIEnv *env,jobject clazz, jlong timeMS) { returnset_last_user_activity_timeout(timeMS/1000);//設置超時時間 } static int setScreenState(JNIEnv *env, jobjectclazz, jboolean on) { return set_screen_state(on);//開啟或關閉屏幕光 } static void android_os_Power_shutdown(JNIEnv *env,jobject clazz) { android_reboot(ANDROID_RB_POWEROFF, 0, 0);//關機 } static void android_os_Power_reboot(JNIEnv *env,jobject clazz, jstring reason) { if (reason== NULL) { android_reboot(ANDROID_RB_RESTART, 0, 0);//重啟 } else { const char *chars = env->GetStringUTFChars(reason, NULL); android_reboot(ANDROID_RB_RESTART2, 0, (char *) chars);//重啟 env->ReleaseStringUTFChars(reason, chars); } jniThrowIOException(env, errno); } ~~~ Power類提供了和內核交互的通道,讀者僅作了解即可。 2. LightService介紹 LightService.java比較簡單,這里直接介紹Native層的實現,主要關注HAL層的初始化函數init_native及操作函數setLight_native。 首先來看初始化函數init_native,其代碼如下: **com_android_server_LightService.cpp::init_native** ~~~ static jint init_native(JNIEnv *env, jobjectclazz) { int err; hw_module_t* module; Devices*devices; devices= (Devices*)malloc(sizeof(Devices)); //初始化硬件相關的模塊,模塊名為“lights” err =hw_get_module(LIGHTS_HARDWARE_MODULE_ID, (hw_module_tconst**)&module); if (err== 0) { devices->lights[LIGHT_INDEX_BACKLIGHT]//背光 = get_device(module, LIGHT_ID_BACKLIGHT); devices->lights[LIGHT_INDEX_KEYBOARD]//鍵盤燈 = get_device(module, LIGHT_ID_KEYBOARD); devices->lights[LIGHT_INDEX_BUTTONS]//按鍵燈 = get_device(module, LIGHT_ID_BUTTONS); devices->lights[LIGHT_INDEX_BATTERY]//電源指示燈 = get_device(module, LIGHT_ID_BATTERY); devices->lights[LIGHT_INDEX_NOTIFICATIONS] //通知燈 = get_device(module, LIGHT_ID_NOTIFICATIONS); devices->lights[LIGHT_INDEX_ATTENTION] //警示燈 = get_device(module, LIGHT_ID_ATTENTION); devices->lights[LIGHT_INDEX_BLUETOOTH] //藍牙提示燈 = get_device(module, LIGHT_ID_BLUETOOTH); devices->lights[LIGHT_INDEX_WIFI] //WIFI提示燈 = get_device(module, LIGHT_ID_WIFI); } else { memset(devices, 0, sizeof(Devices)); } return(jint)devices; } ~~~ Android系統想得很周到,提供了多達8種不同類型的燈。可是有多少手機包含了所有的燈呢? PMS點亮或關閉燈時,將調用setLight_native函數,其代碼如下: **com_android_server_LightService.cpp::setLight_native** ~~~ static void setLight_native(JNIEnv *env, jobjectclazz, int ptr, intlight, int colorARGB, int flashMode, int onMS, int offMS, intbrightnessMode) { Devices*devices = (Devices*)ptr; light_state_t state; ...... memset(&state, 0, sizeof(light_state_t)); state.color = colorARGB; //設置顏色 state.flashMode = flashMode; //設置閃光模式 state.flashOnMS = onMS; //和閃光模式有關,例如亮2秒,滅2秒 state.flashOffMS = offMS; state.brightnessMode = brightnessMode;// //傳遞給HAL層模塊進行處理 devices->lights[light]->set_light(devices->lights[light],&state); } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看