android - vysor - تحميل برنامج droid screen




اكتشاف عندما يتم قفل الشاشة (4)

اغفر لي ، لقد كان هذا يدفعني للجنون ، وسأحاول نشر شيء واضح من خلال غضبي الغاضب.

لقد شاهدت بضع مشاركات هنا حول كيفية التحقق مما إذا كانت الشاشة مقفلة ، ولكن لم يعمل أي منها لي. يكتشف كل ما إذا كانت الشاشة الفعلية متوقفة أم لا (وليس إذا كانت مقفلة).

لدي لعبة تلعب فيها الموسيقى. عندما يتم الضغط على زر القفل ، فإنه يستمر في اللعب. في البداية ، توقفت الموسيقى في OnStop ، لكن التطبيق سيبدأ من جديد بعد أن يتم قفله ، ومن ثم تبدأ الموسيقى في النهاية مرة أخرى.

بعد ذلك ، أضفت KeyboardHidden | التوجيه إلى البيان. هذا يجعله حتى لا يعيد تشغيل التطبيق ، ولكن يبدو أن OnStop لم يعد يتم الاتصال به.

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


أقترح هذا:

private void registerBroadcastReceiver() {
    final IntentFilter theFilter = new IntentFilter();
    /** System Defined Broadcast */
    theFilter.addAction(Intent.ACTION_SCREEN_ON);
    theFilter.addAction(Intent.ACTION_SCREEN_OFF);

    BroadcastReceiver screenOnOffReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String strAction = intent.getAction();

            KeyguardManager myKM = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);

            if (strAction.equals(Intent.ACTION_SCREEN_OFF) || strAction.equals(Intent.ACTION_SCREEN_ON)) 
            {
                if( myKM.inKeyguardRestrictedInputMode()) 
                {
                    System.out.println("Screen off " + "LOCKED");
                } else 
                {
                    System.out.println("Screen off " + "UNLOCKED");
                }
            }
        }
    };

    getApplicationContext().registerReceiver(screenOnOffReceiver, theFilter);
}

الجواب أعلاه منShaul Rosenzweig جنبا إلى جنب مع وظيفة أخرى متاحة للكشف عن الشاشة وخارجها. اختبرت هذا الحل على Samsung Galaxy S4 Mini وعملت بشكل جيد بالنسبة لي.


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

private void registerBroadcastReceiver() {

     final IntentFilter theFilter = new IntentFilter();
    /** System Defined Broadcast */
    theFilter.addAction(Intent.ACTION_SCREEN_ON);
    theFilter.addAction(Intent.ACTION_SCREEN_OFF);
    theFilter.addAction(Intent.ACTION_USER_PRESENT);

    BroadcastReceiver screenOnOffReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String strAction = intent.getAction();

            KeyguardManager myKM = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
if(strAction.equals(Intent.ACTION_USER_PRESENT) || strAction.equals(Intent.ACTION_SCREEN_OFF) || strAction.equals(Intent.ACTION_SCREEN_ON)  )
                if( myKM.inKeyguardRestrictedInputMode())
                {
                    System.out.println("Screen off " + "LOCKED");
                } else
                {
                    System.out.println("Screen off " + "UNLOCKED");
                }

        }
    };

    getApplicationContext().registerReceiver(screenOnOffReceiver, theFilter);
}

بعد هذا سيعطيني مثل الانتاج

I/System.out:LOCKED 
when i off the mobile screen
I/System.out:LOCKED
when i on the mobile screen
I/System.out:UNLOCKED
when i unlock the mobile after pattern lock

قد يكون هذا الرابط مفيدًا للآخرين في شيئين في مكان واحد.

تحقق مما إذا كان الجهاز مغلقًا أم لا:

KeyguardManager myKM = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
boolean isPhoneLocked = myKM.inKeyguardRestrictedInputMode();

(ملاحظة: لا يعمل الأسلوب أعلاه إذا تم تعيين screenlock إلى none في settings-->security-->screenlock .)

تحقق إذا كان الجهاز مستيقظًا أو في وضع السكون: (لإصدار Sdk> L Preview <Sdk Version)

PowerManager powerManager = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
isScreenAwake = (Build.VERSION.SDK_INT < 20? powerManager.isScreenOn():powerManager.isInteractive());

مأخوذ من هذا الرابط: https://gist.github.com/Jeevuz/4ec01688083670b1f3f92af64e44c112

/**
 * Returns true if the device is locked or screen turned off (in case password not set)
 */
public static boolean isDeviceLocked(Context context) {
    boolean isLocked = false;

    // First we check the locked state
    KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
    boolean inKeyguardRestrictedInputMode = keyguardManager.inKeyguardRestrictedInputMode();

    if (inKeyguardRestrictedInputMode) {
        isLocked = true;

    } else {
        // If password is not set in the settings, the inKeyguardRestrictedInputMode() returns false,
        // so we need to check if screen on for this case

        PowerManager powerManager = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
            isLocked = !powerManager.isInteractive();
        } else {
            //noinspection deprecation
            isLocked = !powerManager.isScreenOn();
        }
    }

    Loggi.d(String.format("Now device is %s.", isLocked ? "locked" : "unlocked"));
    return isLocked;
}




screen