Android調用攝像頭

先創建圖片文件,再根據不同的安卓版本采用不同的方法把圖片文件封裝成Uri,然後用Intent啟動相機程序,最後利用回調處理拍出來的相片,代碼如下:

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v4.content.FileProvider;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;
import java.io.File;

public class MainActivity extends AppCompatActivity {
    public static final int TAKE_PHOTO = 1;
    private Uri imageUri;
    private ImageView piture;

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

        File outputImage=new File(getExternalCacheDir(),"output_image.jpg");  //getExternalCacheDir()得到專門用於存放存放當前應用緩存數據的位置,具體路徑為:/sdcard/Android/data//cache
        try{
            if(outputImage.exists()){
                outputImage.delete();
            }else{
                outputImage.createNewFile();
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        if(Build.VERSION.SDK_INT>=24){  //低於7.0用Uri.fromFile()將文件轉換為Uri
            imageUri= FileProvider.getUriForFile(MainActivity.this,"StringAuthority",outputImage); //
        }else{
            imageUri=Uri.fromFile(outputImage);
        }
        //啟動相機
        Intent intent=new Intent("android.media.action.IMAGE_CAPTURE");
        intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);   //第一個是data的名字,第二個是data
        startActivityForResult(intent,1);  //被開始的activity結束後返回一個requestCode=TAKE_PHOTO給覆蓋方法onActivityResult
    }
    @Override
    protected void onActivityResult(int requestCode,int resultCode,Intent data){	回到該activity後會調用的方法
        piture=(ImageView)findViewById(R.id.piture);
        switch(requestCode){
            case TAKE_PHOTO:
                //該resultCode在調用的activity中用setResult(resultCode,intent)設置
                if(resultCode==RESULT_OK){
                    try{
                        Bitmap bitMap= BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));  //通過外部內容接收器讀入圖片Uri
                        piture.setImageBitmap(bitMap);
                    }catch(Exception e){
                        e.printStackTrace();
                    }
                }
        }
    }
}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *