我是靠谱客的博主 彩色冬瓜,最近开发中收集的这篇文章主要介绍android8.0电脑壁纸,Android用原生分享多张图片适配7.0、8.0,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

常规操作只能适配6.0及以下

直接上分享的代码:

Intent share_intent = new Intent();

ArrayList imageUris = new ArrayList();

Uri uri;

for (File f : files) {

imageUris.add(Uri.fromFile(f));

}

share_intent.setAction(Intent.ACTION_SEND_MULTIPLE);//设置分享行为

share_intent.setType("image/png");//设置分享内容的类型

share_intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);

context.startActivity(Intent.createChooser(share_intent, "Share"));

这样的话在Android6.0及以下都是没问题的

c9f071c51eba?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

但是在7.0、8.0上就会出现出现:**android.os.FileUriExposedException **异常,出现这样的问题是因为分享限制原因,需要配置一些东西。

适配Android7.0、8.0

代码书写

public static void originalShareImage(Context context, ArrayList files) {

Intent share_intent = new Intent();

ArrayList imageUris = new ArrayList();

Uri uri;

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {

for (File f : files) {

Uri imageContentUri =

FileProvider.getUriForFile(context, context.getPackageName() + ".fileprovider",f);

imageUris.add(imageContentUri);

}

} else {

for (File f : files) {

imageUris.add(Uri.fromFile(f));

}

}

share_intent.setAction(Intent.ACTION_SEND_MULTIPLE);//设置分享行为

share_intent.setType("image/png");//设置分享内容的类型

share_intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

share_intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);

context.startActivity(Intent.createChooser(share_intent, "Share"));

}

Mainifest配置

android:name="android.support.v4.content.FileProvider"

android:authorities="your packge name.fileprovider"

android:exported="false"

android:grantUriPermissions="true">

android:name="android.support.FILE_PROVIDER_PATHS"

android:resource="@xml/file_paths">

file_paths配置

name="myFile"

path="folder">

其中myFile可以随意写,folder是根目录下的文件夹,也就是你放图片的主目录

以上配置,可能出现微信分享不成功,QQ可以分享成功,系统其它一些应用可以成功的情况,所以也不是很完善,所以,就想出了一个终极的解决办法

终极分享

public static void originalShareImage(Context context, ArrayList files) {

Intent share_intent = new Intent();

ArrayList imageUris = new ArrayList();

Uri uri;

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {

for (File f : files) {

Uri imageContentUri = getImageContentUri(context, f);

imageUris.add(imageContentUri);

}

} else {

for (File f : files) {

imageUris.add(Uri.fromFile(f));

}

}

share_intent.setAction(Intent.ACTION_SEND_MULTIPLE);//设置分享行为

share_intent.setType("image/png");//设置分享内容的类型

share_intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

share_intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);

context.startActivity(Intent.createChooser(share_intent, "Share"));

}

获取图片的绝对的分享地址

/**

*

* @param context

* @param imageFile

* @return content Uri

*/

public static Uri getImageContentUri(Context context, File imageFile) {

String filePath = imageFile.getAbsolutePath();

Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,

new String[]{MediaStore.Images.Media._ID}, MediaStore.Images.Media.DATA + "=? ",

new String[]{filePath}, null);

if (cursor != null && cursor.moveToFirst()) {

int id = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID));

Uri baseUri = Uri.parse("content://media/external/images/media");

return Uri.withAppendedPath(baseUri, "" + id);

} else {

if (imageFile.exists()) {

ContentValues values = new ContentValues();

values.put(MediaStore.Images.Media.DATA, filePath);

return context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

} else {

return null;

}

}

}

按照以上步骤操作,可能会解决分享的问题,亲测有效!

最后

以上就是彩色冬瓜为你收集整理的android8.0电脑壁纸,Android用原生分享多张图片适配7.0、8.0的全部内容,希望文章能够帮你解决android8.0电脑壁纸,Android用原生分享多张图片适配7.0、8.0所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(32)

评论列表共有 0 条评论

立即
投稿
返回
顶部