Dall'interno la mia domanda, sto cercando di creare una e-mail che contiene un'immagine contenuta in un oggetto bitmap.Android: Come utilizzare grantUriPermission per essere in grado di creare e inviare una e-mail con un allegato di 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..."));
}
Questo funziona bene in Android 2.3.
Ma usando le versioni successive, produce il seguente errore:
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()
Così, prendendo il suggerimento del messaggio di errore, ho cercato di grantUriPermission.
grantUriPermission(String toPackage, Uri uri, int modeFlags)
Ma io non sono sicuro di cosa mettere per toPackage o uri
Ma ancora una volta, utilizzando il messaggio di errore, ho modificato il codice come segue:
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..."));
}
E ho l'esatto stesso errore.
Può un animo gentile per favore mi dia un suggerimento su come prendersi cura di oggetti Uri e fornitore di grantUriPermission? È questo l'approccio corretto?
La ringrazio molto per tutto l'aiuto, suggerimento, guide, o suggerimento, si può fornire!
non ha funzionato nemmeno dopo aver aggiunto il permesso ancora crashes..permission negazione –