Android - 模拟相机按钮按下打开相机应用程序,但不拍照

时间:2014-02-10 01:56:51

标签: android button camera simulate

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

我还需要做些什么来让默认的相机应用拍照?(没有用户互动)。

      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"); 

(我不认为这是非常必要的许可)

1 个答案:

答案 0 :(得分:0)

不,您不需要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,即使这段代码也可以加载其他应用程序,而不是库存相机。对于某些活动,<intent-filter>中包含 AndroidManifest.xml 以下两行的任何应用:

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