如何在android中以编程方式按物理按钮?

时间:2016-06-30 05:58:11

标签: android keyevent

有可能吗?

我正在尝试开发一个语音控制的截图应用。出于安全原因,我认为我无法从后台服务中截取屏幕截图。我想通过模拟物理按钮事件来截取屏幕截图,但显然也不可能在服务中实现。

所以,我正在考虑一个可行的解决方法,我从我的服务开始一个活动,它会模拟'VolumeDown'和'Power'按钮来截取屏幕。

//Service
//Speech Recognizer onResults method
ArrayList<String> text = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
String result = "screen";

        if (text.get(0).equals(result)) {
            Intent dialogIntent = new Intent(this, ScreenshotActivity.class);
            dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(dialogIntent);

        }

//Activity
public class ScreenshotActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    this.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_POWER));
    this.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_VOLUME_DOWN));
    }
}

我在logcat上遇到了这个错误:

Dropping event due to no window focus: KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_POWER, scanCode=0, metaState=0, flags=0x8, repeatCount=0, eventTime=210432295, downTime=210432295, deviceId=-1, source=0x101 }

我知道即使我能够截取屏幕截图,它也会是活动页面的屏幕截图,但我仍然想知道我是否可以让这种解决方法真正起作用。

0 个答案:

没有答案