【发布时间】:2017-06-02 08:03:55
【问题描述】:
我正在构建一个应用程序,该应用程序需要从安装我的应用程序的设备打开默认相机应用程序的功能;我的问题是如何实现它?
在谷歌搜索一段时间后,我了解到如何从应用程序中打开相机,但我想要实现的实际上是打开可以使用相机应用程序具有的任何功能的默认相机。你能告诉我如何实现相机吗?
【问题讨论】:
我正在构建一个应用程序,该应用程序需要从安装我的应用程序的设备打开默认相机应用程序的功能;我的问题是如何实现它?
在谷歌搜索一段时间后,我了解到如何从应用程序中打开相机,但我想要实现的实际上是打开可以使用相机应用程序具有的任何功能的默认相机。你能告诉我如何实现相机吗?
【问题讨论】:
您可以使用意图打开相机应用
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);
完成相机应用后,现在将图像恢复
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_PIC_REQUEST) {
Bitmap image = (Bitmap) data.getExtras().get("data");
// do whatever you want with the image now
}
}
希望这会有所帮助。
【讨论】:
要在您的 Android 手机中使用内置的相机应用程序,您需要做一些事情 第一:
要解决上述问题,您需要在清单文件中添加以下代码,以获取使用相机拍照的权限,以及如果您的应用的主要功能要求设备具有相机
<uses-feature android:name="android.hardware.camera" android:required="true" />
如果需要,您还需要在清单文件中添加写入/保存图像的权限,此权限还允许您的应用具有读取权限(此示例不需要)
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
最后请记住,您要求 Android 为您工作,因此它会向您返回一个结果,该图像需要使用 startActivityForResult 并传递代码或将其视为您的应用程序和您的应用程序的标识符 ID Android 会使用 123,它可以是任何整数,只要它不用于 Activity 中的任何其他目的,而不是用于拍照目的:
成员变量
static final int REQUEST_TAKE_PHOTO = 123;
private void takePicture() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
}
将此添加到按钮或图像按钮,以便单击将调用 takePicture 方法
最后一步是请记住,Android 将返回您需要接受的图像或结果数据,并且根据上述标识符代码 REQUEST_TAKE_PHOTO = 123 / requestCode。有一个方法需要你重写
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
// Sample data cast to thumbnail
Bitmap imageBitmap = (Bitmap) extras.get("data");
// Do whatever you want with the thumbnail such as setting it to image view
mImageView.setImageBitmap(imageBitmap);
}
}
【讨论】:
只需向相机发送Intent 请求拍照:
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);
}
}
更多详情:https://developer.android.com/training/camera/photobasics.html
【讨论】: