以编程方式closuresAndroid手机

我们可以通过编程方式closuresAndroid手机吗?

第二个问题:如何在Android中locking和解锁屏幕?

我正在使用下面的代码段,但它不适合我。

KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Activity.KEYGUARD_SERVICE); KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE); lock.disableKeyguard(); // to disable lock.reenableKeygaurd();// to enable 

我也使用了权限。

你可能可以使用PowerManager重新启动(这并不能保证它会重新启动 – 操作系统可能会取消它):

http://developer.android.com/reference/android/os/PowerManager.html#reboot(java.lang.String);

它需要REBOOT权限:

http://developer.android.com/reference/android/Manifest.permission.html#REBOOT

你也可以检查你的logcat时,试图启用/禁用键盘锁,并发表了什么?

正如CommonsWare已经表示 ,这在普通的SDK应用程序中是不可能的。 您需要使用System Firmware Key对您的应用程序进行签名。 但是对于具有Root权限的应用程序来说是可能的。 尝试使用以下代码(如果您有SU访问)

关掉:

 try { Process proc = Runtime.getRuntime() .exec(new String[]{ "su", "-c", "reboot -p" }); proc.waitFor(); } catch (Exception ex) { ex.printStackTrace(); } 

重新开始:

相同的代码,只需使用"reboot"而不是"reboot -p"


[另一个说明:我在某处读到,这些命令不适用于股票macros达光盘,但没有证实自己]

你不能从一个普通的SDK应用程序做到这一点。 只有使用系统固件签名密钥签名的应用程序才能执行此操作

更好的解决scheme是运行:

su -c am start -a android.intent.action.ACTION_REQUEST_SHUTDOWN

你可以使用一个Process

如果您具有sigOrSystem权限android.permission.SHUTDOWN,则可以像下面这样引发受保护的ACTION_REQUEST_SHUTDOWN Intent:

 Intent intent = new Intent("android.intent.action.ACTION_REQUEST_SHUTDOWN"); intent.putExtra("android.intent.extra.KEY_CONFIRM", false); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); 

请注意,在Android 4.0之前,此权限仅为签名。

其实,以我的经验来说,上述的回应并不完全准确。 我正在试验如何调暗屏幕,发现以下内容:

 Window w = getWindow(); WindowManager.LayoutParams lp = w.getAttributes(); lp.screenBrightness =.005f; w.setAttributes (lp); 

将实际上closures我的三星Galaxy Tab,而不是0.005,我使用屏幕亮度值为0。

我怀疑这是错误的地方,但我没有足够的硬件来testing其他Android模型上的代码。 因此,我不能告诉你手机上会发生什么。 我可以告诉你,我的代码closures了我的手机,甚至完全没有签名。

希望我不会后悔分享这个信息…..;)R.

我的设备是根源,所以这就是为什么我使用下面的代码,它的工作完美,如果你的设备是根源,那么你可以使用下面的方法

closures设备

 try { Process proc = Runtime.getRuntime() .exec(new String[]{ "su", "-c", "reboot -p" }); proc.waitFor(); } catch (Exception ex) { ex.printStackTrace(); } 

重新启动设备

 try { Process proc = Runtime.getRuntime() .exec(new String[]{ "su", "-c", "reboot" }); proc.waitFor(); } catch (Exception ex) { ex.printStackTrace(); }