常规操作只能适配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及以下都是没问题的

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相关推荐

  1. 电脑壁纸知乎_分享更多美——你一定会喜欢的4K电脑壁纸【011】简约动漫风壁纸...

    这里是喜欢收藏壁纸的安妮 微信公众号---<安妮女王的精选壁纸> 原图获取可以去公众号(公众号内有云盘链接),知乎会压缩图片 公众号主更4K+电脑壁纸 (图片源自网络,侵删) 点赞收藏加关 ...

  2. android 实现微信分享多张图片的功能

    昨天公司老大通知客户改需求了,原来的微信分享改成分享多张图片,然后屁颠屁颠跑到微信平台看了以后 心里千万只草泥马狂奔而过,微信平台没有提供分享多张的SDK有木有啊,我们只能自己调用系统自带的分享功能实 ...

  3. 刷原生android 8.0,怎样刷入安卓原生系统 小米古董机刷完安卓8.0健步如飞!感觉比MIUI9还快...

    原标题:小米古董机刷完安卓8.0健步如飞!感觉比MIUI9还快 小米2S算是小米手机史上的一代神机,雷布斯当年主持发布会时,更是激动说出了"小米2S性能屌爆了"的经典语句.怎样刷入 ...

  4. android 调用原生分享功能,调用Android 系统自带分享功能

    1. 设置Intent的action为Intent.ACTION_SEND. 2. 把要分享的数据通过.putExtra()传入intent. 3. 设置类型.setType(). 4.startAc ...

  5. android9.0官方壁纸,Android 9.0 修改默认壁纸(主壁纸和wapppaper)

    一.修改主默认壁纸,在对应的产品目录下,替换原来的壁纸,如 android/device/qcom/{vendor}/overlay-go/frameworks/base/core/res/res/d ...

  6. Android之原生分享视频至微信

    本文只是记录一些零碎的东西 最近遇到一个需求,需要分享视频到微信,第三方的分享以及微信自身提供的分享基本上都是分享一个网页链接,这不是我想要的 想要的是:分享出一个点击就可以播放的视频 先看看分享出来 ...

  7. android中如何使用一张图片适配不同尺寸的APP引导页

    在我们平常开发的过程中在做引导页适配的时候,有时候会犯难,怎么样作图可以将各种不同尺寸分辨率的手机都适配好也就是不变形不拉伸,官方给的说法也只是做多套图去适配不同的分辨率,遇到全屏展示引导这种问题的时 ...

  8. android 图片大小判断,android中如何使用一张图片适配不同尺寸的APP引导页

    在我们平常开发的过程中在做引导页适配的时候,有时候会犯难,怎么样作图可以将各种不同尺寸分辨率的手机都适配好也就是不变形不拉伸,官方给的说法也只是做多套图去适配不同的分辨率,遇到全屏展示引导这种问题的时 ...

  9. android9.0官方壁纸,安卓福利:全新Android 9.0原生壁纸 每一张都是谷歌的精挑细选!...

    原标题:安卓福利:全新Android 9.0原生壁纸 每一张都是谷歌的精挑细选! 至今,安卓碎片化的程度依然没有得到缓解,Android 8.0发布已经一年多,但却仅仅只有2%左右的用户成功尝到了奥利 ...

最新文章

  1. html动态报警图片,报警记录.html
  2. 虚拟机创建静默快照报错:msg.snapshot.error-QUIESCINGERROR
  3. NullPointerException: null 报错
  4. Android-实现一个简单的自动翻译插件
  5. SM37作业条目的存储表
  6. MODIS NDVI数据处理相关问题
  7. redis 获取所有的key_在微博微信场景下学习Redis数据结构
  8. 【Prison Break】第二天(3.28)
  9. 一款很好看的个人主页源码
  10. java培训一般有哪些课程_java培训有哪些课程
  11. 软件开发人员的简历项目经验怎么写
  12. 解决git报错:‘fatal: unable to access ‘https://XXX: Failed onnect to github. com port 443: Timed out
  13. Unable to access jar file xxx.jar问题的解决
  14. pandas-task08-文本数据.md
  15. 使用spark-submit工具提交Spark作业
  16. android手机无法root成功,为什么有的安卓手机不能Root?
  17. 编程的本质是逻辑性思维
  18. 白月光与朱砂痣用计算机怎么弹奏,天谕白月光与朱砂痣钢琴谱 乐谱代码怎么使用...
  19. idea设置了默认换行符,ctl + s 保存文件时换行符没有变成默认换行符 解决方法
  20. RX6900XT和RTX3080哪个好

热门文章

  1. Windows 7 ship party
  2. 3G移动通信技术分析
  3. USB设备开发之STM32
  4. 为什么阿里Java规约要求谨慎使用SimpleDateFormat
  5. UITextView自定义placeholder功能:用一个label写了文字,然后当检测到长度不为0的时候就把label隐藏...
  6. 4_1网络学习第一天后感--网络数据下载
  7. mac os 相关命令
  8. 每天学一点flash(56)循环的小实验
  9. AndroidStudio安卓原生开发_UI控件_ImageView_CheckBox_RadioButton---Android原生开发工作笔记98
  10. OAuth2.0_介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记137