2

几天来,我一直在尝试获取 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

4

0 回答 0