相機與裁剪

相機於裁剪在現在安卓app裏很常用的 比如說頭像採集 選擇拍照的話  就需要調用自帶的本機相機 

但是由於從Android7.0開始,Android對訪問文件的權限收回,所以如果我們要在應用件共享文件,應該發送一項content://URI,並對這個URI授予臨時訪問的權限。而對這個URI授權最簡單的方式就是使用FileProvider類。

我們有兩種解決辦法 我用的是其中一種

第一步 先寫一個

Application 在船建一個oncreate()方法 在裏面寫

StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
builder.detectFileUriExposure();  並在配置文件裏找到他
這樣解決了高版本無法使用系統相機的缺陷 在Mainivity裏要寫 

private ImageView imageView;
private String path = Environment.getExternalStorageDirectory()+"/tengteng.png";

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

    imageView = findViewById(R.id.images);

    imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //1.MediaStore.ACTION_IMAGE_CAPTURE 調取系統相機的Action
            Intent it = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            //將當前拍好的圖片存入Sdcard   MediaStore.EXTRA_OUTPUT  寫
            it.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(path)));
            //啓動
            startActivityForResult(it, 1000);
        }
    });
}
//重新回到Activity中 回調的放法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);

    //2.當點擊拍完照的OK時 回調onActivityResult 打開裁剪
    if(requestCode == 1000 && resultCode == RESULT_OK){

        //裁剪  com.android.camera.action.CROP 裁剪的Action
        Intent intent = new Intent("com.android.camera.action.CROP");
        //將圖片交給裁剪
        intent.setDataAndType(Uri.fromFile(new File(path)), "image/*");

        //設置裁剪的功能
        //是否支持裁剪
        intent.putExtra("CROP", true);

        //設置比例
        intent.putExtra("aspactX", 1);
        intent.putExtra("aspactY", 1);

        //設置圖片輸出的大小
        intent.putExtra("outputX", 250);
        intent.putExtra("outputY", 250);

        //是否支持人臉識別
        intent.putExtra("onFaceDetection", false);
        //將圖片返回
        intent.putExtra("return-data", true);

        startActivityForResult(intent, 2000);

    }


    //設置圖片
    if(requestCode == 2000 && resultCode == RESULT_OK){

        Bitmap bitmap = data.getParcelableExtra("data");
        imageView.setImageBitmap(bitmap);
    }

}
這樣就可以使用了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章