亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從鎖屏喚醒設備并顯示活動

從鎖屏喚醒設備并顯示活動

qq_笑_17 2022-11-30 16:43:14
我正在編寫警報應用程序。當響鈴時間到了,我希望設備喚醒并顯示允許用戶禁用鬧鐘的活動。它工作正常,除非設備被鎖定(也就是在鎖屏上)。我已經嘗試了很多我找到的關于這個的答案,但幾乎所有的東西似乎都被棄用了,我顯然想避免使用這些方法。使用我當前的代碼(我試圖將我找到的答案結合起來)它會振動很短的時間(我的鬧鐘應該在響鈴時這樣做,但通常它會持續到鬧鐘被禁用) ,但不會更多。之后解鎖設備時,不會顯示禁用警報的活動并且警報不會響起(由該活動完成)。但是,我已經檢查并確保 onCreate() 方法完全執行并且直到最后沒有任何錯誤。在我的 BroadcastReceiver 中(我使用 AlarmManager 在必要的時候執行我的代碼):    @Override    public void onReceive(Context context, Intent intent)    {        PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);        PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "myalarmapp:alarm.");        wl.acquire(600000);        Intent startAlarmActivity = new Intent(context, AlarmActivity.class);        context.startActivity(startAlarmActivity);        wl.release();    }在我的活動的 onCreate() 方法中:        setContentView(R.layout.activity_alarm);        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {            setShowWhenLocked(true);            setTurnScreenOn(true);            KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);            keyguardManager.requestDismissKeyguard(this, null);        }        else {            getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |                    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |                    WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON |                    WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);        }在我的 AndroidManifest.xml 中:    <uses-permission android:name="android.permission.VIBRATE" />    <uses-permission android:name="android.permission.WAKE_LOCK" />    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />...最好我希望活動顯示在鎖屏“上方”,但這不是我的主要優先事項。如果 Activity 開始并且用戶必須解鎖他們的手機才能看到它就足夠了,而 Activity 一直在振動并使手機響鈴。注意:我正在 Android 7.1 上測試我的應用程序,我當前的最低 API 級別是 21。
查看完整描述

1 回答

?
慕姐8265434

TA貢獻1813條經驗 獲得超2個贊

我已經弄清楚了,喚醒鎖實際上并不是什么問題。問題是我還在活動的 onStop() 方法中取消了警報(并調用了 finish() )。當屏幕被鎖定時 onStop() 被立即調用,所以它也關閉了活動并停止響鈴。


我通過檢查以下布爾值來修復它(來源:檢測屏幕何時鎖定):



        KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);

        boolean isPhoneLocked = keyguardManager.inKeyguardRestrictedInputMode();


        PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);

        boolean isScreenAwake = powerManager.isInteractive();

通過該解決方案,我還設法在鎖屏上顯示它,而無需為 AndroidManifest 中的活動設置選項。


查看完整回答
反對 回復 2022-11-30
  • 1 回答
  • 0 關注
  • 86 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號