如何使用关键ACTION_DOWN从默认相机应用拍摄照片?

时间:2016-11-08 15:12:23

标签: android android-service android-6.0-marshmallow keyevent

我正在使用Android M(6.0)。在我的服务中,我使用意图调用默认的相机应用程序:

        File photo = new File(Environment.getExternalStorageDirectory(),  "myFile.jpg");
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
        try {
            getApplication().startActivity(intent);
        } catch (final ActivityNotFoundException e) {
            e.printStackTrace();
        } catch (final Exception e) {
            e.printStackTrace();
        }

在我的默认相机应用中,我可以按物理键ACTION_DOWN拍摄照片。我的问题是如何以编程方式调用密钥ACTION_DOWN。我尝试了一些方法,但他们没有工作(没有root)。另一方面,如何在没有按下GUI中的任何内容或手机中的物理按钮的情况下拍照?

拳法:

Runtime.getRuntime().exec("input keyevent " +
     Integer.toString(KeyEvent.ACTION_DOWN));

第二种方法

BaseInputConnection mInputConnection = new BaseInputConnection(this, true);
KeyEvent down = new KeyEvent(now, now, KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_HOME, 0);
mInputConnection.sendKeyEvent(down);

第三种方法(不好,因为它需要root手机)

Instrumentation m_Instrumentation = new Instrumentation();
m_Instrumentation.sendKeyDownUpSync( KeyEvent.ACTION_DOWN );

1 个答案:

答案 0 :(得分:1)

  

我们如何在没有按下GUI中的任何内容或手机中的物理按钮的情况下拍照?

直接使用相机API,而不是ACTION_IMAGE_CAPTURE