我想在我的应用程序中实现屏幕锁定功能,但目前我无法让它工作.我有一个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",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(); } }
在Manifest中添加
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"></uses-permission>
有谁知道我做错了什么?
解决方法
您可以通过两种方式锁定屏幕:
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);
更新2:
http://rdcworld-android.blogspot.in/2012/03/lock-phone-screen-programmtically.html
http://developer.android.com/guide/topics/admin/device-admin.html#lock