几天来,我一直在尝试获取 SurfaceView 的位图屏幕截图,但我研究得越多,目前我的 HTC 设备上的基于 Android OS 2.3.4 的操作系统似乎还没有解决方案。
然后转到 B 计划,我刚刚发现了另一个博客:“在我的 HTC Evo 3d 上,我所要做的就是按住电源按钮 1-2 秒,然后点击主页按钮,它会截屏。不需要应用程序。” 事实证明这在我的平板电脑上非常有效。
我也通过挖掘知道有这些意图:android.intent.action.SCREEN_OFF & android.intent.category.HOME
(所以我尝试了一堆代码实验,试图模仿代码中的2键组合,以在这个蛮力庄园中获得截图。不幸的是没有成功)。
所以我的 ?- 是否有人对从 java 代码为我的 HTC 设备调用此“屏幕截图序列”的方法有任何见解?(假设我需要欺骗操作系统认为我正在按住电源键并同时点击 Home 键)......
更多:这是我正在尝试的代码片段:
按钮点击测试... ...
Thread t = new Thread() {
public void run() {
Instrumentation inst = new Instrumentation();
inst.sendKeyDownUpSync(KeyEvent.KEYCODE_POWER);
Instrumentation inst2 = new Instrumentation();
inst2.sendKeyDownUpSync(KeyEvent.KEYCODE_HOME);
} // run
}; // thread t
不起作用,因为 inst.sendKeyDownUpSync 是错误的,因为我需要 sendKeyDown (& hold) 行为或其等价物
非常感谢您的任何建议。如果我确实让这个工作,我会在这里发布解决方案。干杯 GH
附言; 我认为这样做的引擎盖下有一些自定义意图?是否有系统日志可以在某处查看调用树以找出它是什么?
编辑(更多)... 2011 年 9 月 24 日
更多的。仍然无法正常工作,但我正在沿着这条路前进并认为它更接近......
// 尝试模拟长按 (DOWN) + HOME 告诉 HTC 调用“屏幕截图”命令(警告:HTC 平板电脑特定行为!)
Thread tt = new Thread() {
public void run() {
final KeyEvent dapowerkey = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_POWER);
Handler onesecondhandler = new Handler();
onesecondhandler.postDelayed(new Runnable() {
public void run() {
// fpr about 1 second send power down keystrokes (DOWN ONLY)
while (true) { dispatchKeyEvent(dapowerkey); }
} // we are done running on the timer past time point
}, 750); // 3/4 second key press
// send the HOME keystroke
Instrumentation inst1 = new Instrumentation();
inst1.sendKeyDownUpSync(KeyEvent.KEYCODE_HOME);
} // outer thread run tp mpt block the GUI
}; // outer thread t
tt.start();
...
还想如果我可以将正确的意图直接发送到设备上的正确位置,我可能能够直接启动屏幕捕获功能(这是我真正想要的。通过一些日志检查(当你 Long-Power + Home点击 HTC)正在调用一个名为“com.htc.mysketcher”(FlashActivity)的程序......
再说一次,如果我弄清楚了,我会在群里发帖……干杯 GH