سؤال

أحاول تنفيذ WakeLock في تطبيق Android الخاص بي.لدي الكود التالي في onCreat ():

pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
myWakeLock = pm.newWakeLock(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,"WakeLock for Tuner");

السطر الثاني يؤدي إلى حادث تحطم طائرة.فإنه يلقي استثناء فادح.بقدر ما أستطيع أن أرى يقول Android أن الوسيطة الأولى ليست مستوى قفل تنبيه صالحًا.ولكن على موقع المطورين، يوصى باستخدام FLAG_KEEP_SCREEN_ON لذلك فأنا في حيرة من أمري (http://developer.android.com/reference/android/os/PowerManager.html#newWakeLock%28int,%20java.lang.String%29)

هل يجب علي استخدام PowerManager.FULL_WAKE_LOCK المهمل؟

الكود التالي، كما هو مقترح في السؤال كيفية تشغيل Android WakeLock؟ ، ليست الطريقة الصحيحة في رأيي.

getWindow().addFlags(LayoutParams.FLAG_KEEP_SCREEN_ON);

لا أحتاج إلى تطبيق Wakeup for the Hole.التطبيق عبارة عن موالف للآلات الموسيقية ويجب أن يظل مستيقظًا فقط عندما يكون الموالف قيد التشغيل.الخطة هي استدعاء myWakeLock.acquire() في طريقة startTuner() وmyWakeLock.release() التناظرية في طريقة stopTuner().لا أستطيع معرفة كيفية تحقيق ذلك بالطريقة المقترحة.

إليك رسالة الاستثناء الكاملة:

04-13 19:21:14.815: E/AndroidRuntime(9452): FATAL EXCEPTION: main
04-13 19:21:14.815: E/AndroidRuntime(9452): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.benediktbock.ffttest/de.benediktbock.ffttest.MainActivity}: java.lang.IllegalArgumentException: Must specify a valid wake lock level.
04-13 19:21:14.815: E/AndroidRuntime(9452):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2249)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2299)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at android.app.ActivityThread.access$700(ActivityThread.java:154)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1284)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at android.os.Looper.loop(Looper.java:137)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at android.app.ActivityThread.main(ActivityThread.java:5306)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at java.lang.reflect.Method.invokeNative(Native Method)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at java.lang.reflect.Method.invoke(Method.java:511)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at dalvik.system.NativeStart.main(Native Method)
04-13 19:21:14.815: E/AndroidRuntime(9452): Caused by: java.lang.IllegalArgumentException: Must specify a valid wake lock level.
04-13 19:21:14.815: E/AndroidRuntime(9452):     at android.os.PowerManager.validateWakeLockParameters(PowerManager.java:488)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at android.os.PowerManager.newWakeLock(PowerManager.java:474)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at de.benediktbock.ffttest.MainActivity.onCreate(MainActivity.java:62)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at android.app.Activity.performCreate(Activity.java:5255)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2213)
04-13 19:21:14.815: E/AndroidRuntime(9452):     ... 11 more
هل كانت مفيدة؟

المحلول

ولكن على موقع المطور، يوصى باستخدام FLAG_KEEP_SCREEN_ON

وهذا يشير إلى بديل للاستخدام WakeLock, ، إذا كان هدفك هو إبقاء الشاشة قيد التشغيل أثناء وجود بعض واجهة المستخدم الخاصة بك في المقدمة.

هل يجب علي استخدام PowerManager.FULL_WAKE_LOCK المهمل؟

سيعتمد ذلك على ما تحاول القيام به.يجب عليك استخدام أحد تلك الثوابت PowerManager في newWakeLock().

التطبيق عبارة عن موالف للآلات الموسيقية ويجب أن يظل مستيقظًا فقط عندما يكون الموالف قيد التشغيل.الخطة هي استدعاء myWakeLock.acquire() في طريقة startTuner() وmyWakeLock.release() التناظرية في طريقة stopTuner().لا أستطيع معرفة كيفية تحقيق ذلك بالطريقة المقترحة.

يتصل setKeepScreenOn(true) على بعض View في واجهة مستخدم الموالف الخاص بك عندما تريد إبقاء الشاشة نشطة.يتصل setKeepScreenOn(false) على بعض View في واجهة مستخدم الموالف لديك عندما تريد استئناف سلوك الشاشة العادي.بين هذه المكالمات، طالما أن واجهة مستخدم الموالف لديك في المقدمة، فلن يتم إيقاف تشغيل الشاشة.على سبيل المكافأة، لا تحتاج إلى WAKE_LOCK إذن.

نصائح أخرى

giveacodicetagpre.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top