【问题标题】:Android - simulating camera button press opens camera app but does not take pictureAndroid - 模拟相机按钮按下打开相机应用程序但不拍照
【发布时间】:2014-02-10 01:56:50
【问题描述】:

我发送以下意图来模拟硬件相机按钮按下。此代码在服务中运行。我第一次运行此代码(在随机屏幕中)时,它会按预期打开默认的相机应用程序。但是,如果我在相机应用程序中再次运行此代码,它不会像我预期的那样拍照。它只是重新加载相机应用程序。问题是:

我还需要做什么才能让默认相机应用拍照?(无需用户交互)。

      long eventtime = SystemClock.uptimeMillis(); 
      Intent downIntent = new Intent(Intent.ACTION_CAMERA_BUTTON, null); 
      KeyEvent downEvent = new KeyEvent(eventtime, eventtime, 
      KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_CAMERA, 0); 
      downIntent.putExtra(Intent.EXTRA_KEY_EVENT, downEvent); 
      sendOrderedBroadcast(downIntent, "android.permission.CAMERA"); 

      Intent upIntent = new Intent(Intent.ACTION_CAMERA_BUTTON, null); 
      KeyEvent upEvent = new KeyEvent(eventtime+100, eventtime+100, 
      KeyEvent.ACTION_UP, KeyEvent.KEYCODE_CAMERA, 0); 
      upIntent.putExtra(Intent.EXTRA_KEY_EVENT, upEvent); 
      sendOrderedBroadcast(upIntent, "android.permission.CAMERA"); 

(我觉得这个权限真的没必要)

【问题讨论】:

    标签: android button camera simulate


    【解决方案1】:

    不,您不需要 CAMERA 权限即可打开相机应用。但是,不能保证系统会在模拟相机按下时打开相机应用程序,这是用户控制的偏好。

    鼓励您使用MediaStore.ACTION_IMAGE_CAPTURE,如developer.android.com所示:

    static final int REQUEST_IMAGE_CAPTURE = 1;
    
    private void dispatchTakePictureIntent() {
        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
            startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
        }
    }
    

    由于 Android 的 open Intent model,即使此代码也可以加载其他应用程序,而不是普通相机。任何包含 AndroidManifest.xml 在 <intent-filter> 中的以下两行用于某些活动的应用程序:

      <action android:name="android.media.action.IMAGE_CAPTURE"/>
      <category android:name="android.intent.category.DEFAULT"/>
    

    【讨论】:

    • 如果 ti 存在,这只会打开相机应用程序。用户必须单击按钮才能拍照。正如我在问题中已经说过的那样,我要做的是通过模拟相机按钮事件在没有用户交互的情况下拍照。我知道这是可能的,因为我可以使用 Tasker 执行此操作,任务包含“打开相机应用程序”、“按下相机按钮”。
    • 首先,感谢您的提示。我将在 Tasker 度过接下来的几个小时。
    • 其次,如果您尝试一下,您会发现“拍照”操作不使用股票相机应用程序。它会启动一个自定义活动,并让您选择前置或后置摄像头、分辨率、延迟等等。
    • 我也尝试“加载应用程序”并指向“相机”应用程序,但这不使用相机按钮 - 相机应用程序是按包名称启动的。到目前为止,一切都很好。延迟 2 秒后,我添加了一个“相机”按钮。这种工作方式:Tasker 要求 Root 访问权限,我同意。但是当我的 JellyBean 设备上的相机应用程序收到(可能)相机按钮点击时,它不会拍照。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多