Java-код Android для имитации последовательности нажатия клавиш 2 (для создания снимка экрана устройства) - PullRequest
2 голосов
/ 22 сентября 2011

Я уже несколько дней пытаюсь получить растровый снимок экрана SurfaceView, но чем больше я его изучаю, тем не менее, в настоящее время не существует решения для ОС на базе ОС Android 2.3.4 моего устройства от HTC.

Итак, перейдите к Плану B, где я только что обнаружил другой блог: «В моем HTC Evo 3d все, что мне нужно сделать, это удерживать кнопку питания в течение 1-2 секунд, а затем нажать кнопку« Домой », и это займетснимок экрана. Приложение не требуется. "Оказывается, это прекрасно работает на моем планшете.

Я также знаю, что, копаясь, есть следующие намерения: android.intent.action.SCREEN_OFF & android.intent.category.HOME

(Так что япопробовал кучу экспериментов с кодом, чтобы попытаться имитировать комбинацию из 2-х клавиш в коде, чтобы получить скриншот в этой грубой усадьбе. К сожалению, безуспешно).

Так мой?- Есть ли у кого-нибудь понимание метода, чтобы вызвать эту «последовательность снимков экрана» для моего устройства HTC из кода Java?(Предположим, мне нужно обмануть операционную систему, заставив ее думать, что я удерживаю клавишу питания и одновременно нажимаю клавишу 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

PS;Я полагаю, что под капотом есть какие-то особые намерения?Есть ли где-нибудь системный журнал, чтобы можно было заглянуть в дерево вызовов и выяснить, что это такое?

РЕДАКТИРОВАТЬ (БОЛЬШЕ) ... 9/24/11

Подробнее.Все еще не работает, но я иду по этому пути и думаю, что он ближе ...

// Попытка имитировать Длительное нажатие (ВНИЗ) + ДОМОЙ, чтобы сказать 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

...