【问题标题】:How to take a picture from default camera app using key ACTION_DOWN?如何使用键 ACTION_DOWN 从默认相机应用程序拍照?
【发布时间】:2016-11-08 23:35:02
【问题描述】:

我正在开发 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 );

【问题讨论】:

  • “我的问题是如何以编程方式调用 ACTION_DOWN 键”——你不能。如果要拍照,请执行问题中第一个代码sn-p中的代码。
  • 那么,您是说以编程方式插入 Key down 事件吗?
  • @uelordi:我想使用代码执行操作键。
  • @CommonsWare:有人跟我说,我们可以用代码控制拍照过程,而不用按GUI或手机上的任何按钮
  • “有人跟我说,我们可以用代码控制拍照过程”——嗯,不。出于明显的安全原因,您不能将关键事件注入其他应用程序。

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


【解决方案1】:

我们如何在不按 GUI 或手机物理按钮的情况下拍照?

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

【讨论】:

  • 感谢您的解决方案,但客户不想进行新活动。他只想调用默认应用。
  • @user8430:那么你必须让用户点击按钮来拍照。大约有 20 亿台 Android 设备运行着数百种不同的相机应用程序。没有一个 API 可以让你在没有用户交互的情况下拍照,也没有一个必须有一些标准化的 UI 让用户拍照(所以即使从安全角度来看,你的黑客也不会起作用)。
  • @CommonsWave:他想自动拍照。它将每 5 秒拍照一次。我们可以在服务中运行一个函数来调用允许每5秒拍照的函数,但我不知道函数内部的细节
  • @user8430:“他想自动拍照”——然后直接使用相机 API,正如我在回答中描述的那样。在没有用户参与的情况下,您无法使用设备提供/用户选择的相机应用拍照。
  • 您是否有任何文件可以验证我们无法以编程方式控制默认应用程序?告诉客户这项工作是不可能的,这对我很有用
猜你喜欢
  • 1970-01-01
  • 2011-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多