Android拍照功能简单实现,可直接复制粘贴,小白专用

(1)先调用相机

                        dispatchTakePictureIntent();

(2)对 dispatchTakePictureIntent()方法编写

public void dispatchTakePictureIntent() {
     
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    //必须确保手机上有相机,才可以继续,否则会一直闪退,故加判断语句
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
     
        File photoFile = null;
        try {
     
            photoFile = createImageFile();
        } catch (IOException ex) {
     
            ex.printStackTrace();
        }
        if (photoFile != null) {
     
            Uri photoURI = FileProvider.getUriForFile(this, "com.example.netcloudsharing.fileprovider", photoFile);
            takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
            startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
        }
    }
}

(3)在上一个方法中使用了createImageFile(),所以我们来实现以下,这个方法的意思是创建一个图片文件并返回,返回值为File,注意在这里的代码中currentPath是照片的绝对路径,如果你想找到图片,就是使用这个currentPath字符串来找

private File createImageFile() throws IOException {
     
    //Create an image file name
    String imageFileName = getTimeToPath();
    Log.d("imageFileName", imageFileName);
    File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
    File image = File.createTempFile(
            imageFileName,
            ".jpg",
            storageDir
    );
    currentPath = image.getAbsolutePath();
    Log.d("imageFileName", currentPath);
    return image;
}

(4)在这段代码中,使用了getTimeToPath()方法,我们有要实现这个方法,这个方法是根据拍照的时间,创建照片的名字,返回值为String字符串

public String getTimeToPath() {
     
    SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss", Locale.CHINA);
    Date curDate = new Date();
    return format.format(curDate);
}

(5)如果拍照成功,我们在上面有一个存下来了的地址currentPath,使用这个就可以正确的显示图片了
,在以下代码中ivImage是一个ImageView的空间,这个自己设置好就行了

Bitmap bitmap = BitmapFactory.decodeFile(currentPath);
ivImage.setImageBitmap(bitmap);

以上就是代码的编辑,但是这个时候还不算完,在第二点对 dispatchTakePictureIntent()方法编写中,会发现一个
"com.example.netcloudsharing.fileprovider"这样的东西,这里你写你自己的包名,最后加fileprovider,比如我的包名为
Android拍照功能简单实现,可直接复制粘贴,小白专用_第1张图片
那就是com.example.netcloudsharing+.fileprovider 主要有个点啊!!!!!
但是这个东西是什么东东呢,我们还需要去配置一下这个路径,随着系统的升级,这个是必要操作,具体为什么,还待我去搞清楚,因为这个是简易实现,只说明怎么去实现
在清单文件中,即AndroidManifest.xml中更改
Android拍照功能简单实现,可直接复制粘贴,小白专用_第2张图片

在这里,你只用去修改,authorities里面的字符串就行了,也就是我们刚刚上面"com.example.netcloudsharing.fileprovider"这段东东,在这个时候会发现,resource标红了,因为我们还没去实现这个xml文件,对这标红那段,点击一次,使用快捷键alter+Enter直接快捷创建一个xml资源文件,在资源文件里面,我们填的东西是如下

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-files-path
    name="my_images"
    path="."/>
</paths>

以上代码已经可以实现拍照功能了,但是还欠缺权限,在清单文件中给与权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

分别是读和写的权限,有些高级手机这个时候,还是不给显示,这是因为要动态获取权限,不过只有少部分要动态获取权限,一般来说静态就可以了,如果还是出问题,可以直接留言,24小时我会尽量解决!

你可能感兴趣的:(android,安卓,移动开发)