سؤال

أنا باستخدام Wakelock في تطبيق منع الهاتف من النوم عند التطبيق مرئيا.

المشكلة تأتي عندما يكون هناك تغيير اتجاه النظام يدمر وإعادة يخلق التطبيق في وضع أفقي.إذا كان wakelock الموقت قد انتهت في خلفية النظام يأخذ الإفراج عن wakelock فرصة لإيقاف الشاشة.

تحرير:أود أن أذكر أنني وضع Wakelock onResume, والإفراج عن onPause - كما فهمت من الضروري أن الإصدار ثم منع التطبيق من تسريب wakelock.

أحتاج wakelock الاستمرار من خلال تغيير التوجه.

أدناه لقد أوجزت حل هذا.هل هذه هي الطريقة المفضلة التعامل معها, و هل هناك أي بدائل ؟


إنشاء خدمة الذي يحمل wakelock (بدلا من النشاط) وعندما النشاط unbinds الخدمة يبدأ العد التنازلي (لمدة 10 ثوان) الذي سيتم الإفراج عن wakelock عند انتهاء صلاحية جهاز ضبط الوقت إذا كان النشاط لا ربط.اذا كان مجرد تغيير التوجه النشاط ربط في غضون 10 ثوان وحتى تحافظ على wakelock ، إذا لم wakelock سيتم الافراج عنهم.

شكرا

هل كانت مفيدة؟

المحلول

وبدلا من WakeLock، في محاولة getWindow().setFlags() باستخدام العلامة WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON.

<اقتباس فقرة>   

إذا انتهت مدة صلاحية الموقت wakelock في   الخلفية النظام يأخذ   الإفراج عن wakelock كفرصة   لإيقاف تشغيل الشاشة.

وولا ينبغي. بحكم التعريف، وقد تفاعلت المستخدم مع الجهاز، وبالتالي فإن الشاشة يجب ان تبقى على هذا السبب، بغض النظر عن أي شيء آخر.

نصائح أخرى

وهنا كيف فعلت ذلك ...

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK|PowerManager.ON_AFTER_RELEASE, "DoNotDimScreen");

وتلاه ...

wl.acquire();

... عندما تحتاج إلى تفعيل فعلا قفل اليقظة.

والعلم و"PowerManager.ON_AFTER_RELEASE 'الوخزات الموقت نشاط المستخدم بحيث يبقى على الشاشة لفترة أطول قليلا عندما يتم تحرير هذا القفل بعد، والتي سوف يكون عليه الحال عندما يتم تدمير نشاطك على تغيير الاتجاه.

والأشغال OK بالنسبة لي!

أنا فعلت هذا من قبل في الواقع أبدا الإفراج عن wakelock.بدلا من الحصول عليه مع المهلة.

private PowerManager.WakeLock wl;

protected void onStart(Bundle savedInstanceState) {
    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "Words counter");
    // disable reference counting, as acquire/release calls are not paired
    wl.setReferenceCounted(false);
    wl.acquire();
}

protected void onStop() {
    // acquire for few seconds to keep lock until onStart is called with new orietnation
    wl.acquire(3000);
}

مزايا أكثر من غيرها من الأساليب:

  • قابلة للاستخدام مع SCREEN_DIM_WAKE_LOCK
  • بسيطة (لا حاجة للعب مع isFinishing ().... الخ)
  • لا كزة نشاط المستخدم بعد تغيير التوجه.أولا-هاء.خافتة عرض يبقى خافتا
  • إذا كنت الإصدار (على سبيل المثالالوقت هو أكثر ولكن المستخدم لا يزال في النشاط) إنه صدر على الفور.لا تحتاج إلى الانتظار المهلة الافتراضية.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top