Zer*_*Tek 1 camera android android-camera android-camera-intent
最近我写了一个Android应用程序,需要从相机中的构建中拍摄照片并将其恢复到我的应用程序中.我使用了许多教程中的一个,一切正常.但后来我在另一台设备上测试了它并没有任何功能.似乎有问题,所以我如何确保我可以在每台设备上拍照?(看我的回答,这更像是一个教程)
我使用了许多教程中的一个,一切正常.但后来我在另一台设备上测试了它并没有任何功能.起初我非常惊讶但后来我决定深入研究这个话题.我意识到很多这些教程都会导致一个大问题.所以我决定与你分享我的经验.
让我从大多数教程使用的常见approch开始.
首先,您选择这样的requestID:
private static final int CAMERA_PIC_REQUEST = 1337;
Run Code Online (Sandbox Code Playgroud)
然后创建一个Intent并启动相机Activity
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);
Run Code Online (Sandbox Code Playgroud)
要获取图片,请使用onActivityResult函数并从接收到的意图数据中读取图片
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_PIC_REQUEST && resultCode == RESULT_OK && data != null) {
// do something like
Bitmap bitmap = (Bitmap) data.getExtras().get("data");
}
}
Run Code Online (Sandbox Code Playgroud)
看起来不错不是吗?它有效,但现在是棘手的部分.
正如在android文档中所写的那样,意图数据只会返回一个缩小版本,或者说拍摄照片的小版本,而某些设备根本不会返回任何内容!甚至可能会发生数据不为空但您收到"Failureiving result ResultInfo"异常的情况.
所以现在怎么办?解决方案非常简单.您只需告诉相机将图片保存到SD卡并将URI返回到此文件.下面,我将向您展示上面编辑的代码.
我们创建一个静态requestID 和一个URI
private static final int CAMERA_PIC_REQUEST = 1337;
private static Uri outputFileUri;
Run Code Online (Sandbox Code Playgroud)
我们创建相机活动,但这次我们传递一个额外的参数(我们的URI)
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);
Run Code Online (Sandbox Code Playgroud)
现在为了处理图像,我们使用与上面相同的方法,但我们使用URI而不是使用intent数据
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_PIC_REQUEST && resultCode == RESULT_OK) {
// do something to get the bitmap from the uri for example
Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), outputFileUri);
}
Run Code Online (Sandbox Code Playgroud)
使用此解决方案,您可以确保在每台设备上都能获得图片.但要小心,因为你得到一个完整的比例位图,可能需要缩小位图以避免内存不足错误.如果您不想保留用户SD卡上保存的图片,只需删除该文件即可.
谢谢阅读!
| 归档时间: |
|
| 查看次数: |
2262 次 |
| 最近记录: |