這隻能使用JNI來完成,因爲dex引擎處理喚醒鎖控制。有一點的代碼張貼忽略了所有的錯誤檢查和異常處理在這裏:http://irrlicht.sourceforge.net/forum/viewtopic.php?f=9&t=50228 (無恥地複製&粘貼的谷歌閱讀器如果鏈接曾經打破)
// constructing the lock
JNIEnv* jni = 0;
Context->App->activity->vm->AttachCurrentThread(&jni, NULL);
if (jni)
{
jclass classNativeActivity = jni->FindClass("android/app/NativeActivity");
jclass classPowerManager = jni->FindClass("android/os/PowerManager");
if (classPowerManager)
{
jmethodID idNativeActivity_getAppContext = jni->GetMethodID(classNativeActivity, "getApplicationContext", "()Landroid/content/Context;");
jobject AppContext = jni->CallObjectMethod(Context->App->activity->clazz, idNativeActivity_getAppContext);
if (AppContext)
{
jmethodID idNativeActivity_getSystemService = jni->GetMethodID(classNativeActivity, "getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;");
jstring POWER_SERVICE = jni->NewStringUTF("power");
jobject PowerManager = jni->CallObjectMethod(AppContext, idNativeActivity_getSystemService, POWER_SERVICE);
if (PowerManager)
{
jmethodID idPowerManager_newWakeLock = jni->GetMethodID(classPowerManager, "newWakeLock", "(ILjava/lang/String;)Landroid/os/PowerManager$WakeLock;");
int SCREEN_BRIGHT_WAKE_LOCK = 0x0000000a;
long int ON_AFTER_RELEASE = 0x20000000;
jstring jWakeLockTag = jni->NewStringUTF("com.entity.Polygame.MY_BRIGHT_SCREEN_LOCK_LOL");
WakeLock = jni->CallObjectMethod(PowerManager, idPowerManager_newWakeLock, SCREEN_BRIGHT_WAKE_LOCK | ON_AFTER_RELEASE, jWakeLockTag);
debugLog("constructed wake lock");
jni->DeleteLocalRef(jWakeLockTag);
}
jni->DeleteLocalRef(POWER_SERVICE);
}
}
Context->App->activity->vm->DetachCurrentThread();
}
// acquire/release (the lock is in "released" state when first constructed)
JNIEnv* jni = 0;
Context->App->activity->vm->AttachCurrentThread(&jni, NULL);
if (jni)
{
jclass wakeLock = jni->FindClass("android/os/PowerManager$WakeLock");
if (locked) to acquire the lock
{
jmethodID idWakeLock_acquire = jni->GetMethodID(wakeLock, "acquire", "()V");
jni->CallVoidMethod(WakeLock, idWakeLock_acquire);
debugLog("acquired wake lock");
}
else // release the lock
{
jmethodID idWakeLock_release = jni->GetMethodID(wakeLock, "release", "()V");
jni->CallVoidMethod(WakeLock, idWakeLock_release);
debugLog("released wake lock");
}
Context->App->activity->vm->DetachCurrentThread();
Active = locked;
}
我不知道通過NDK支持獲取或釋放WakeLock的方式。 – CommonsWare
kewl ..爲什麼評論你缺乏知識? – MollyCat
在StackOverflow上,很多問題都被問到,並且沒有答案。對於像你這樣的問題(「告訴我如何去做X」),提問的人不知道是否缺少答案意味着沒有辦法做X,或者沒有人知道提供了答案。在其中一些情況下,我會發表評論,表明我認爲答案是「沒有辦法做X」,如果你沒有得到任何實際的答案,所以你有辦法解釋沉默。如果我*積極* X不能完成,我會將其作爲答案發布。 – CommonsWare