如何锁定Android设备的屏幕

时间:2011-07-20 13:22:56

标签: android

我想在我的应用程序中实现屏幕锁定功能,但目前我无法让它工作。我有一个alertDialog,它将通过使用几个按钮请求用户输入。如果用户按“否”,我想锁定屏幕(无限期,不是一段时间)。以编程方式锁定屏幕的最佳方法是什么?我尝试使用以下内容,但是,虽然我的对话框被取消,但屏幕永远不会锁定。

KeyguardManager keyguardManager = (KeyguardManager)getSystemService(Activity.KEYGUARD_SERVICE); 
                        KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE);
                        lock.reenableKeyguard();

mycode的

import android.app.Activity;
import android.app.AlertDialog;
import android.app.KeyguardManager;
import android.app.KeyguardManager.KeyguardLock;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Window;

public class MyApp extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        this.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);


        startDialog();
    }



    private void startDialog() {

        AlertDialog.Builder myAlertDialog = new AlertDialog.Builder(this);

        myAlertDialog.setMessage("Do you want to exit the application?");
        myAlertDialog.setPositiveButton("Yes",
                new DialogInterface.OnClickListener() {

                    // do something when the button is clicked
                    public void onClick(DialogInterface arg0, int arg1) {
                        System.out.println("...yes button is clicked..");
                        arg0.dismiss();

                    }
                });

        myAlertDialog.setNegativeButton("NO",
                new DialogInterface.OnClickListener() {

                    // do something when the button is clicked
                    public void onClick(DialogInterface arg0, int arg1) {
                        System.out.println("...clicked no...");
                        arg0.dismiss();
                        KeyguardManager keyguardManager = (KeyguardManager)getSystemService(Activity.KEYGUARD_SERVICE); 
                        KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE);
                        lock.reenableKeyguard();

                    }
                });
        AlertDialog alert = myAlertDialog.create();
        myAlertDialog.setCancelable(false);
        alert.setCancelable(false);
        alert.getWindow().setLayout(600, 400);

        myAlertDialog.show();
    }


}

在清单中添加

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

有谁知道我做错了什么?

3 个答案:

答案 0 :(得分:8)

有两种方法可以锁定屏幕:

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

// Choice 1
manager.goToSleep(int amountOfTime);

// Choice 2
PowerManager.WakeLock wl = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Your Tag");
wl.acquire();
wl.release();

需要此权限:

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

<强>更新

screenbrightness的值介于0和1之间。如果该值设置为负数,则将其设置为默认屏幕亮度。通过将亮度更改为0,亮度将足够低,屏幕将自动关闭。

WindowManager.LayoutParams params = getWindow().getAttributes();
params.screenBrightness = 0;
getWindow().setAttributes(params);

Thisthis可能对您有所帮助。

更新2:

以下是一些用于锁定屏幕的方法的链接:

http://rdcworld-android.blogspot.in/2012/03/lock-phone-screen-programmtically.html

http://developer.android.com/guide/topics/admin/device-admin.html#lock

答案 1 :(得分:3)

尝试像这样覆盖它:

 @Override
 protected void onResume() {
    // TODO Auto-generated method stub
    WindowManager.LayoutParams params = getWindow().getAttributes();
    params.screenBrightness = 1;
    getWindow().setAttributes(params);
    super.onResume();
}

它对我有帮助:D

答案 2 :(得分:1)

我花了一整天时间决定是将屏幕亮度更改为0还是只是锁定本身。

Here is an entire example on github for those of you who would like to see all of the required code in action! Don't forget to check out the lock.xml file!这就是所有使用政策的所在!看起来有点像这样!

<?xml version="1.0" encoding="UTF-8"?>
<device-admin xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <uses-policies>

        <force-lock />
    </uses-policies>

</device-admin>