我想知道是否有办法通过代码重启设备.我试过了:
Intent i = new Intent(Intent.ACTION_REBOOT);
i.putExtra("nowait", 1);
i.putExtra("interval", 1);
i.putExtra("window", 0);
sendBroadcast(i);
Run Code Online (Sandbox Code Playgroud)
并添加了权限,REBOOT但它仍然无法正常工作.
谢谢
更新有很多其他帖子询问如何在Android中获取屏幕截图但似乎没有一个完整的答案如何这样做.最初我把这个问题发布为一个问题,因为我在试图打开一个流到帧缓冲区时遇到了一个特定的问题.现在我已经交换了将Frame Buffer转储到一个文件中,所以我更新了我的帖子以显示我是如何到达那里的.为了参考(和确认),我找到了从这篇文章发送FrameBuffer到一个文件的命令(不幸的是他没有提供他如何达到这一点).我只是想知道如何将从Frame Buffer中提取的原始数据转换为实际的图像文件.
我的目的是在Android设备上完全转储实际屏幕.我没有使用adb桥就能找到这样做的唯一方法就是直接访问系统的Frame Buffer.显然,这种方法需要设备上的root权限以及运行它的应用程序!幸运的是,出于我的目的,我可以控制设备的设置方式,并使设备具有root权限,并且提供给我的应用程序是可行的.我的测试目前正在运行2.2.3的旧Droid上进行.
我从/sf/answers/487923691/找到了我的第一个如何处理它的提示.经过一番研究后,我发现另一篇文章描述了如何以root身份正确运行shell命令.他们用它来执行重启,我用它将当前帧缓冲区发送到实际文件.我目前的测试只是通过ADB和基本Activity(每个都提供root)来实现.我将从后台运行的服务进行进一步测试,更新来!这是我的整个测试活动,可以将当前屏幕导出到文件:
public class ScreenshotterActivity extends Activity {
public static final String TAG = "ScreenShotter";
private Button _SSButton;
private PullScreenAsyncTask _Puller;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
_SSButton = (Button)findViewById(R.id.main_screenshotButton);
_SSButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (_Puller != null)
return;
//TODO: Verify that external storage is available! Could always use internal instead...
_Puller = new PullScreenAsyncTask();
_Puller.execute((Void[])null);
}
});
} …Run Code Online (Sandbox Code Playgroud) 我写了一个使用的Android应用程序,android.os.PowerManager.reboot()我添加<uses-permission android:name="android.permission.REBOOT" />了我的AndroidManifest.xml.但是,当我运行应用程序时,它总是抛出以下异常:
java.lang.SecurityException: Neither user 10039 nor current process has android.permission.REBOOT. at android.os.Parcel.readException(Parcel.java:1247)
at android.os.Parcel.readException(Parcel.java:1247)
at android.os.Parcel.readException(Parcel.java:1235)
at android.os.IPowerManager$Stub$Proxy.reboot(IPowerManager.java:427)
at android.os.PowerManager.reboot(PowerManager.java:481)
at Test.testPower(Test.java:374)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:204)
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:194)
at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:186)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:520)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)
at android.os.Parcel.readException(Parcel.java:1247)
at android.os.Parcel.readException(Parcel.java:1235)
at android.os.IPowerManager$Stub$Proxy.reboot(IPowerManager.java:427)
at android.os.PowerManager.reboot(PowerManager.java:481)
at com.fsl.cts.FSLPlaybackTest.testPower(FSLPlaybackTest.java:374)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:204)
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:194)
at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:186)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:520)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)
Run Code Online (Sandbox Code Playgroud)
我做错了什么,或者froyo重启时有问题吗?