android - रिसीवर/सेवा से स्क्रीन को चालू करना




service android-wake-lock (2)

मुझे नहीं पता कि आप किस बारे में बात कर रहे हैं, वाकेलॉक निश्चित रूप से पदावनत नहीं है। कुछ प्रकार अब Google के काम करने का पसंदीदा तरीका नहीं हैं, लेकिन सामान्य वैकलॉक अभी भी आस-पास हैं और अभी भी ऐसा करने का सबसे आसान तरीका है। लॉक लेते समय ACQUIRE_CAUSES_WAKEUP ध्वज जोड़ना सुनिश्चित करें। वास्तव में सूचना है कि एक WakefulBroadcastReceiver wakelocks का उपयोग करके कार्यान्वित किया जाता है।

मैं चाहूंगा कि मेरा ऐप स्क्रीन को चालू करने और मेरे ऐप को प्रदर्शित करने में सक्षम हो। मान लें कि मैं एक अलार्म सेट कर रहा हूं और हर घंटे मैं चाहता हूं कि मेरा ऐप डिवाइस को स्वाभाविक रूप से सोने से पहले 2 मिनट के लिए प्रदर्शित किया जाए।

मैं देखता हूं कि WakeLock (FULL_LOCK) और KeyguardManager को पदावनत किया गया है।

मैंने एक WakefulBroadcastReceiver और सेवा बनाई है और ये काम कर रहे हैं।

@Override
protected void onHandleIntent(Intent intent) {
    // I need to show the screen here!

    for (int i=0; i<5; i++) {
        Log.i("SimpleWakefulReceiver", "Running service " + (i + 1)
                + "/5 @ " + SystemClock.elapsedRealtime());
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
        }
    }
    Log.i("SimpleWakefulReceiver", "Completed service @ " + 
          SystemClock.elapsedRealtime());
    SimpleWakefulReceiver.completeWakefulIntent(intent);
}

मैं प्रोग्राम को स्क्रीन पर कैसे चालू कर सकता हूं, पिछले लॉक को प्राप्त कर सकता हूं और इंटेंट सर्विस से अपनी गतिविधि प्रदर्शित कर सकता हूं?

धन्यवाद


स्क्रीन को चालू करने के लिए आप इस कोड का उपयोग कर सकते हैं।

lock = ((KeyguardManager) getSystemService(Activity.KEYGUARD_SERVICE)).newKeyguardLock(KEYGUARD_SERVICE);
powerManager = ((PowerManager) getSystemService(Context.POWER_SERVICE));
wake = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG");

lock.disableKeyguard();
wake.acquire();
           getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
                | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
                | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
                | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
                | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);

AndroidManifest.xml फ़ाइल में आपको निम्नलिखित अनुमति चाहिए:

<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />

संपादित करें (इस का उपयोग करें, कुछ भी पता नहीं है):
ऐसा करने के लिए एक और विकल्प है, इसके लिए आपको एक गतिविधि शुरू करने की आवश्यकता है, onCreate() गतिविधि में आपको झंडे को खिड़की से जोड़ने की आवश्यकता है। उदाहरण के लिए:

   @Override
    protected void onCreate(Bundle savedInstanceState) {
      getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);`
}




android-wake-lock