我发送以下意图来模拟按下硬件相机按钮。此代码在服务中运行。我第一次运行此代码(在随机屏幕中)它会按预期打开默认的相机应用程序。但是,如果我在相机应用程序中再次运行此代码,它不会像我期望的那样拍照。它只是重新加载相机应用程序。问题是:
我还需要做些什么来让默认的相机应用拍照?(没有用户互动)。
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");
(我不认为这是非常必要的许可)
答案 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"/>