Từ trong ứng dụng của tôi, tôi đang cố tạo một email chứa hình ảnh chứa trong đối tượng bitmap.Android: Cách sử dụng grantUriPermission để có thể tạo và gửi email kèm theo tệp đính kèm bitmap
private void sendEmailWithBitmapAttached(){
final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setType("plain/text");
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Email Subject");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Email Body");
emailIntent.setType("image/png");
ContentResolver cr = getContentResolver();
// insert the image and create a path
String imageBitmapPath = MediaStore.Images.Media.insertImage(cr, bitmapForEmail,"title", "description");
// create a uri
Uri imageUri = Uri.parse(imageBitmapPath);
emailIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
emailIntent.putExtra(Intent.EXTRA_STREAM, imageUri);
// send the email
startActivity(Intent.createChooser(emailIntent, "Send mail..."));
}
Điều này hoạt động tốt trong Android 2.3.
Nhưng sử dụng các phiên bản sau, nó tạo ra các lỗi sau:
07-13 23:01:01.252: E/MediaStore(5194): Failed to insert image
07-13 23:01:01.252: E/MediaStore(5194): java.lang.SecurityException:
Permission Denial:
writing com.android.providers.media.MediaProvider
uri content://media/external/images/media from
pid=5194, uid=10151 requires
android.permission.WRITE_EXTERNAL_STORAGE,
or grantUriPermission()
Vì vậy, lấy gợi ý của thông báo lỗi, tôi đã cố gắng để grantUriPermission.
grantUriPermission(String toPackage, Uri uri, int modeFlags)
Nhưng tôi không chắc chắn những gì để đặt cho toPackage hoặc uri
Nhưng một lần nữa, sử dụng các thông báo lỗi, tôi sửa đổi mã như sau:
private void sendEmailWithBitmapAttached(){
final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setType("plain/text");
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Email Subject");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Email Body");
emailIntent.setType("image/png");
ContentResolver cr = getContentResolver();
// create a Uri for the content provider suggested by the error message
Uri uri = Uri.parse("content://media/external/images/media");
// create a package provider string suggested by the error messge.
String provider = "com.android.providers.media.MediaProvider";
// grant all three uri permissions!
grantUriPermission(provider, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
grantUriPermission(provider, uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
grantUriPermission(provider, uri, Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
// insert the image and create a path
String imageBitmapPath = MediaStore.Images.Media.insertImage(cr, bitmapForEmail,"title", "description");
// create a uri
Uri imageUri = Uri.parse(imageBitmapPath);
emailIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
emailIntent.putExtra(Intent.EXTRA_STREAM, imageUri);
// send the email
startActivity(Intent.createChooser(emailIntent, "Send mail..."));
}
Và tôi nhận được chính xác cùng một lỗi.
Một linh hồn tử tế có thể cho tôi một gợi ý về cách chăm sóc uri và các nhà cung cấp của grantUriPermission không? Đây có phải là cách tiếp cận chính xác không?
Cảm ơn bạn rất nhiều vì BẤT CỨ trợ giúp, gợi ý, hướng dẫn hoặc đề xuất, bạn có thể cung cấp!
không hoạt động ngay cả sau khi thêm quyền, nó vẫn bị treo. –