有可能吗?
我正在尝试开发一个语音控制的截图应用。出于安全原因,我认为我无法从后台服务中截取屏幕截图。我想通过模拟物理按钮事件来截取屏幕截图,但显然也不可能在服务中实现。
所以,我正在考虑一个可行的解决方法,我从我的服务开始一个活动,它会模拟'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 }
我知道即使我能够截取屏幕截图,它也会是活动页面的屏幕截图,但我仍然想知道我是否可以让这种解决方法真正起作用。