From 5448bdf7bbba32455ab538295363b8c086a75158 Mon Sep 17 00:00:00 2001 From: seven332 Date: Sat, 18 Jun 2016 22:08:29 +0800 Subject: [PATCH] Use FileProvider to share image For apps targeting Android N, file:// URIs outside app is not supported any more. --- app/src/main/AndroidManifest.xml | 12 +++++++++- .../hippo/ehviewer/ui/GalleryActivity.java | 16 +++++++++++--- app/src/main/res/xml/filepaths.xml | 22 +++++++++++++++++++ 3 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 app/src/main/res/xml/filepaths.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bdc2fb28d..e6dc1896e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -130,8 +130,18 @@ + + + + + diff --git a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java index c20092525..7adc7030b 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java @@ -20,6 +20,7 @@ import android.animation.Animator; import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.annotation.SuppressLint; +import android.content.ContentResolver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; @@ -838,14 +839,23 @@ public class GalleryActivity extends EhActivity implements SeekBar.OnSeekBarChan Toast.makeText(this, R.string.error_cant_save_image, Toast.LENGTH_SHORT).show(); return; } + String filename = file.getName(); + if (filename == null) { + Toast.makeText(this, R.string.error_cant_save_image, Toast.LENGTH_SHORT).show(); + } - // TODO Create ContentProvider for some app are not grand storage write permission - Uri uri = file.getUri(); String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension( - MimeTypeMap.getFileExtensionFromUrl(uri.toString())); + MimeTypeMap.getFileExtensionFromUrl(filename)); if (TextUtils.isEmpty(mimeType)) { mimeType = "image/jpeg"; } + + Uri uri = new Uri.Builder() + .scheme(ContentResolver.SCHEME_CONTENT) + .authority("com.hippo.ehviewer.fileprovider") + .appendPath("temp") + .appendPath(filename) + .build(); Intent intent = new Intent(); intent.setAction(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_STREAM, uri); diff --git a/app/src/main/res/xml/filepaths.xml b/app/src/main/res/xml/filepaths.xml new file mode 100644 index 000000000..45111f5ad --- /dev/null +++ b/app/src/main/res/xml/filepaths.xml @@ -0,0 +1,22 @@ + + + + + + + +