如何在Android中以编程方式锁定/解锁手机

10

在我的应用程序中,我需要锁定和解锁手机。我搜索了很多答案并尝试了它们,但没有一个有效。

我需要在 onCreate() 中解锁电话,并在我完成活动时再次锁定电话。

你们知道如何做到这一点吗?

感谢朋友们。

编辑:

我尝试过的一些链接是:

如何在屏幕被锁定时显示Activity?

Android屏幕锁定/解锁编程

https://groups.google.com/forum/#!topic/android-developers/BOLjJTMO4zE

在我的应用程序中,我正在使用AlarmManager安排任务,然后启用电话锁定。我的活动在计划时间上启动,但它没有解锁我的电话。当我手动解锁电话时,运行活动会出现。


2
你尝试了哪些答案,这样我们就知道不建议它们? - CodingIntrigue
2
“没有人在工作”并不是您症状的有用描述。请完整而准确地解释您尝试了什么以及遇到了什么问题。 - CommonsWare
1
@BladeOrz:我已经添加了一些已访问页面的链接。 - Sanjay Joshi
@CommonWare:我添加了一点关于我的问题的描述。谢谢。 - Sanjay Joshi
3个回答

16

BroadcastReceiver 中设置 wakelock ,并在 activity 中执行以下操作:

Do This:

Window window = this.getWindow();
window.addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD);
window.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED);
window.addFlags(LayoutParams.FLAG_TURN_SCREEN_ON);

导入以下内容

import android.view.Window;
import android.view.WindowManager.LayoutParams;

这种方式似乎有效,我的应用程序被带到了前台...即使没有输入SIM卡PIN码。 我只是觉得你可能无法访问任何手机或数据功能。如果是这种情况,我会告诉你的... - 130nk3r5
Jip,已确认。因此您将无法访问sim卡功能。因此,如果您想绕过输入pin并启动应用程序,则这非常有效...只要用户不最小化或关闭应用程序,否则您将回到登录屏幕。 - 130nk3r5

7
截至API 27,FLAG_SHOW_WHEN_LOCKEDFLAG_TURN_SCREEN_ON已被弃用。相反,在Manifest中使用以下内容。
<activity
    android:name=".MyActivity"
    android:turnScreenOn="true"
    android:showWhenLocked="true"/>

或者,对于一般用途,在您的Activity中:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
        setTurnScreenOn(true);
        setShowWhenLocked(true);
    } else {
        Window window = getWindow();
        window.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED);
        window.addFlags(LayoutParams.FLAG_TURN_SCREEN_ON);
    }
}

1
尝试这个...
@Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
                    setContentView(R.layout.activity_main);
    }

    @Override
        protected void onPause() {
            super.onPause();
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);


        }

WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD 在 API 26 或 27 中已被弃用。 - zeitgeist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接