我正在尝试将图像转换为 uri 并将其保存到相机的文件夹中,只要在相机上拍照不是问题,但是当您想要转换并保存它时,应用程序将自行退出。请亲爱的任何人提供下面的一些示例脚本代码。
活动
ActivityResultLauncher<Intent> activityResultLauncher;
buttonSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent ix = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
activityResultLauncher.launch(ix);
}
});
查看
activityResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
Bundle exstra = result.getData().getExtras();
Uri imageUri;
Bitmap bitmap = (Bitmap) exstra.get("data");
WeakReference<Bitmap> result1 = new WeakReference<>(Bitmap.createScaledBitmap(bitmap,
bitmap.getHeight(),bitmap.getWidth(),false).copy(Bitmap.Config.RGB_565,true));
Bitmap bmP = result1.get();
imageUri = saveImage(bmP, UploadCamera.this);
imgT.setImageURI(imageUri);
lv_txt.setText(""+imageUri);
}
});
保存图像
private Uri saveImage(Bitmap img, Context context) {
File imagesFolder = new File(context.getCacheDir(),"photome");
Uri uris = null;
try{
imagesFolder.mkdir();
File file = new File(imagesFolder,"captureimage.jpg");
FileOutputStream stream = new FileOutputStream(file);
img.compress(Bitmap.CompressFormat.JPEG,100,stream);
stream.flush();
stream.close();
uris = FileProvider.getUriForFile(context.getApplicationContext(),"",file);
} catch (FileNotFoundException e){
} catch (IOException e){
}
return uris;
}
我尝试在清单中添加提供程序,但出现错误,应用程序提前退出且无法运行。
在清单中添加提供商请求
<provider
android:authorities="${applicationId}.provider"
android:name="androidx.core.content.FileProvider"
android:exported="true"
android:grantUriPermissions="true">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"></meta-data>
</provider>
我希望你能帮我解决这个问题。
启动相机
int currentapiVersion = android.os.Build.VERSION.SDK_INT;
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
String fileName = System.currentTimeMillis() + ".jpg";
tempFile = new File(Environment.getExternalStorageDirectory() + savePath, fileName);
if (currentapiVersion < 24) {
Uri fileUri = Uri.fromFile(tempFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); onActivityResult
} else {
ContentValues contentValues = new ContentValues(1);
contentValues.put(MediaStore.Images.Media.DATA, tempFile.getAbsolutePath());
Uri fileUri = getApplication().getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
}
startActivityForResult(intent, TAKE_PHOTOS_CODE);
读取图片并显示到ImangView
imageView.setImageURI(Uri.fromFile(tempFile));