點擊一個按鈕進入這個方法,下面是代碼:
private void takePhoto(){
//初始化照片路徑
Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File file = new File(getExternalFilesDir(null)+File.separator+"myPicture");
if(!file.exists()){
file.mkdirs();
}
String pictureName =new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+".jpg";
File saveFile= new File(file,pictureName);
uri = FileProvider.getUriForFile(this,"univ.buaa.icabinet.activity",saveFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT,uri);//根據這個uri保存照片
startActivityForResult(intent,REQUEST_CODE_CAMERA);//結果回傳onActivityResult函式
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode==RESULT_OK&&requestCode==REQUEST_CODE_CAMERA) {
Toast.makeText(this, "保存照片成功", Toast.LENGTH_SHORT).show();
Bitmap bitmap =(Bitmap) Objects.requireNonNull(data.getExtras()).get("data");
picture_of_object.setImageBitmap(bitmap);
}
super.onActivityResult(requestCode, resultCode, data);
}}
枯了
uj5u.com熱心網友回復:
對了,我的FileProvider的filepath_data.xml是這么寫的:<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_storage_root" path="DCIM" />
<external-files-path name="external_file_path" path="DCIM" />
</paths>
我真的,查遍了互聯網上的資料

uj5u.com熱心網友回復:
不能是什么意思,有什么日志資訊嗎。另外權限有嗎。。這個sdcard卡讀取要動態申請權限的在默認新建的工程里面,除非你把target api改小
uj5u.com熱心網友回復:
不能就是代碼第二行執行不了。。。emmm權限我用Rxpermission申了。。應該不能是權限的問題,因為我不加儲存照片的代碼段是可以打開相機的。。。
uj5u.com熱心網友回復:
嗐 已經知道是uri=null的問題,請問大家可能是什么原因呢,是file path錯了嗎uj5u.com熱心網友回復:
你試試在intent中添加這一段:if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); //添加這一句表示對目標應用臨時授權該Uri所代表的檔案
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/64278.html
標籤:Android
