سؤال

مرحبا، أحاول استخدام خدمة للتحكم في Wakelock حتى أتمكن من مغادرة الشاشة بشكل دائم عند تشغيل التطبيق الخاص بي. أقوم بإنشاء Wakelock وتنشيطه في OnCreaTe () وإصداره في OnDestrony () ولكن أحصل على الخطأ "لا يمكن حل WL". هل يمكن لأي شخص أن يفسر كيف يمكنني الحصول على أكثر من ذلك؟ الرمز أدناه:

public class WakeLockService extends Service {

    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }  
    @Override
    public void onCreate() {
        PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
        PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag");
        wl.acquire();
    }
    @Override
    public void onDestroy() {
        wl.release();
    }
}
هل كانت مفيدة؟

المحلول

ألا تفتقد الخط

    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag");

في ondestroy ()؟ إنه متغير محلي في ONCREATE ()، لكنه لم يتم الإعلان عنه في OnDestroy () على الإطلاق.

أو أكثر احتمالا، قد ترغب في جعله حلا من فئة Wakelockservice بدلا من متغير محلي.

نصائح أخرى

حسنا، حتى لو كنت تستخدم متغير مثيل، أعتقد أن هذه ليست هي الطريقة للقيام بذلك. من يدعو destroy()ب آمل أن لا تكون أنت، إنها مهمة OS للقيام بذلك. ولكن عندما تتحمل قفل الاستيقاظ، فمن غير المرجح للغاية destroy() طريقة تسمى، لأن نظام التشغيل سوف يقوم أولا بتدمير الأنشطة / الخدمات الأخرى.

إلى جانب ذلك، فانتخر للغاية للحصول على قفل الاستيقاظ في onCreate() طريقة. قبل onCreate() يتم الوصول إلى الهاتف قد ينام بالفعل عند تشغيل الخدمة من إنذار مقابل النشاط الموجود في الخلفية.

من الصعب قول ما يجب أن تضعه بشكل مختلف لأنك لا تعطي سياقا كبيرا. المسار المعتاد للأحداث هو هذا. أ BroadcastReceiver يحصل يسمى وفي onReceive() يمكنك الحصول على قفل الاستيقاظ ووضعه في متغير ثابت في خدمتكم. عند القيام بذلك، يجب أن تتصل stopSelf(), ، حرر قفل الاستيقاظ ثم لا يغلب على المتغير الثابت الذي يحافظ على مرجع إلى القفل.

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

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

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