Android 使用系统相机拍摄照片保存到本地并在系统相册中显示

Posted wukj_litai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 使用系统相机拍摄照片保存到本地并在系统相册中显示相关的知识,希望对你有一定的参考价值。

这是我的第一篇博客文章,一直获取别人的劳动成果,今天开始我也要分享我的劳动成果给大家。这篇博客主要探讨使用android 手机自带相机拍摄照片并把照片保存到本地,并通过广播通知系统相册进行更新图片,这样我们可以在系统的相册中找到相应的图片并可以对相应的图片进行操作。
我们知道使用系统默认的相机拍摄照片有两种方式:

  • 在intent中指定图片保存的路径
    如果我们在intent 中指定了图片保存的路径,那么我们调用相机拍照之后拍的照片会保存在指定的路径下,和使用手机的相机拍照一样,图片比较大。先看下面的代码:
public class MainActivity extends AppCompatActivity 

    private Button myPhoto;
    private File picture;
    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myPhoto = (Button)findViewById(R.id.myPhoto);
        myPhoto.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //调用系统相机
                String fileName = DateFormat.format("yyyyMMdd_hhmmss", Calendar.getInstance(Locale.CHINA)) + ".jpg";
                picture = new File(Environment.getExternalStorageDirectory()
                        .getAbsolutePath()+"/service",fileName);
                Uri imageUri = Uri.fromFile(picture);
                intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);          //直接使用,没有缩小
                startActivityForResult(intent, 100);// 100 是请求码

            
        );

    

    @Override
    protected void onActivityResult(int requestCode, int result,Intent data) 
        if(result==-1)    //result 返回的是-1 表示拍照成功 返回的是 0 表示拍照失败
            Uri uri = Uri.fromFile(picture);
            Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
            intent.setData(uri);
            this.sendBroadcast(intent);  // 这里我们发送广播让MediaScanner 扫描我们制定的文件
                                         // 这样在系统的相册中我们就可以找到我们拍摄的照片了
        

    

代码还是比较简单的,在我实现的过程中在网上找了好多网友的例子,发现有些实现的思路大概都是这样的,有些需要把拍摄的照片插到系统相册中,我感觉应该没有这样麻烦,最后在一位网友的帮助下完成了,使用上面的方法很简单,拍摄照片之后我们的照片保存在service 文件夹下面,在系统的相册中也可以找到这个文件,我们在系统相册中删除掉这个文件之后发现service文件夹下面的这个文件也被删除了,达到了我们需要的目的。这个使用我们的onActivityResult 的data 是 null.

  • 在intent中未指定图片保存的路劲
    在intent中如果不指定图片的保存路径,程序更简单,
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //调用系统相机
    startActivityForResult(intent, 200);// 200 是请求码

我们需要在onActivityResult 的 Intent data 参数中获取相关的图片信息,进行处理之后得到图片,但是这次得到的只是缩略图,我的手机拍摄之后只有几十KB ,这个关于从data 中获取图片我这里就不说了,CSDN上有好多博客关于这写的很好。

好了,就这些吧,能写出这篇博客很感谢我的一位上海的网友,我们本来都不认识,在一个技术群里面我提出了这个问题,他热心的帮我解决了,感谢这位朋友。另外,我的技术水平有限,上面的博客文章中有什么问题,希望大家告诉我,我会及时改正。


以上是关于Android 使用系统相机拍摄照片保存到本地并在系统相册中显示的主要内容,如果未能解决你的问题,请参考以下文章

Android:保存用户使用相机拍摄的照片

避免图库保存在Android中使用相机拍摄的照片

Android - 通过 Intent 拍摄照片并使用自定义名称将它们保存到自定义目的地

Android - 拍摄照片

将使用相机拍摄的照片捕获并存储到本地数据库/PhoneGap/Cordova/iOS

Android:BroadcastReceiver 意图检测拍摄的相机照片?