Android调用手机摄像头的方法

本文实例为大家分享了Android调用手机摄像头的具体代码,供大家参考,具体内容如下

根据<第一行代码>进行改写:

布局文件,只有一个按钮,和一个Imageview,imageview用于显示拍下后的图片
activity_main.xml




    


        

MainActivity.java

package com.example.choosepictest;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import androidx.core.content.FileProvider;

import android.Manifest;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Camera;
import android.graphics.Matrix;
import android.media.ExifInterface;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class MainActivity extends AppCompatActivity {

    public static final int TAKE_PHOTO=1;

    private Button takePhoto;
    private ImageView picture;
    private Uri imageUri;

    public static File tempFile;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        takePhoto = (Button) findViewById(R.id.take_photo);
        picture = (ImageView) findViewById(R.id.picture);
        takePhoto.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                tempFile=new File(getExternalCacheDir(),"output_image.jpg");
                if(tempFile.exists())
                {
                    tempFile.delete();
                }
                try {
                    tempFile.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.N)
                {
                    imageUri= FileProvider.getUriForFile(MainActivity.this,
                            "com.example.choosepictest.fileprovider",tempFile);
                }else{
                    Uri.fromFile(tempFile);
                }
                Intent intent=new Intent("android.media.action.IMAGE_CAPTURE");
                intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);
                startActivityForResult(intent,TAKE_PHOTO);
            }
        });
    }

    protected void onActivityResult(int requestCode,int resultCode,Intent data)
    {
        super.onActivityResult(requestCode,requestCode,data);
        switch (requestCode)
        {
            case TAKE_PHOTO:
            if(resultCode==Activity.RESULT_OK)
            {
                Bitmap bitmap= null;
                try {
                    bitmap = BitmapFactory.decodeStream(getContentResolver()
                    .openInputStream(imageUri));
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
                picture.setImageBitmap(rotateIfRequired(bitmap));
            }
            break;
            default:
                break;
        }

    }

    private Bitmap rotateIfRequired(Bitmap bitmap)
    {
        String path=tempFile.getPath();
        ExifInterface exif = null;
        try {
            exif=new ExifInterface(path);
        } catch (IOException e) {
            e.printStackTrace();
        }
        int orientation= exif.getAttributeInt(ExifInterface.TAG_EXIF_VERSION,
                ExifInterface.ORIENTATION_NORMAL);
        switch (orientation)
        {
            case ExifInterface.ORIENTATION_ROTATE_90:
                bitmap=rotateBitmap(bitmap,90);
                break;
            case ExifInterface.ORIENTATION_ROTATE_180:
                bitmap=rotateBitmap(bitmap,180);
                break;
            case ExifInterface.ORIENTATION_ROTATE_270:
                bitmap=rotateBitmap(bitmap,270);
                break;
            default:
                break;
        }
        return bitmap;

    }

    private Bitmap rotateBitmap(Bitmap bitmap,int degree)
    {
        Matrix matrix=new Matrix();
        matrix.postRotate((float)degree);
        Bitmap rotateBitmap=Bitmap.createBitmap(bitmap,0,0,
                bitmap.getWidth(),bitmap.getHeight(),matrix,true);
        bitmap.recycle();
        return bitmap;


    }

}

活动管理(mainfest):



    
        
            
                

                
            
        

        

            

        

    

用于指定路径file_paths.xml:



    

效果图:

Android调用手机摄像头的方法_第1张图片

这是虚拟机,所以啥也看不到,真机就可以看到了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

你可能感兴趣的:(Android调用手机摄像头的方法)