android7.0实现分享图片到朋友圈功能

本文实例为大家分享了android实现分享图片到朋友圈功能的具体代码,供大家参考,具体内容如下

在Android7.0中,系统对scheme为file://的uri进行了限制,所以通过这种uri来进行分享的一些接口就不能用了,比如使用代码来调用分享朋友圈的接口。

此时就得使用其他的URI scheme来代替 file://,比如MediaStore的 content://。直接上代码:

private static boolean checkInstallation(Context context, String packageName) {
  try {
   context.getPackageManager().getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
   return true;
  } catch (PackageManager.NameNotFoundException e) {
   return false;
  }
 }

 public static void shareToWeChat(View view, Context context) {
  // TODO: 2015/12/13 将需要分享到微信的图片准备好
  try {
   if (!checkInstallation(context, "com.tencent.mm")) {
    SnackBarUtil.show(view, R.string.share_no_wechat);
    return;
   }
   Intent intent = new Intent();
   //分享精确到微信的页面,朋友圈页面,或者选择好友分享页面
   ComponentName comp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareToTimeLineUI");
   intent.setComponent(comp);
   intent.setAction(Intent.ACTION_SEND_MULTIPLE);
   intent.setType("image/*");
//  intent.setType("text/plain");
   //添加Uri图片地址
//  String msg=String.format(getString(R.string.share_content), getString(R.string.app_name), getLatestWeekStatistics() + "");
   String msg = context.getString(R.string.share_content);
   intent.putExtra("Kdescription", msg);
   ArrayList<Uri> imageUris = new ArrayList<Uri>();
   // TODO: 2016/3/8 根据不同图片来设置分享
   File dir = context.getExternalFilesDir(null);
   if (dir == null || dir.getAbsolutePath().equals("")) {
    dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath());
   }
   File pic = new File(dir, "bigbang.jpg");
   pic.deleteOnExit();
   BitmapDrawable bitmapDrawable;
   if (Build.VERSION.SDK_INT < 22) {
    bitmapDrawable = (BitmapDrawable) context.getResources().getDrawable(R.mipmap.bannar);
   } else {
    bitmapDrawable = (BitmapDrawable) context.getDrawable(R.mipmap.bannar);
   }
   try {
    bitmapDrawable.getBitmap().compress(Bitmap.CompressFormat.JPEG, 75, new FileOutputStream(pic));
   } catch (FileNotFoundException e) {
    e.printStackTrace();
   }
   if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
    imageUris.add(Uri.fromFile(pic));
   }else {
    //修复微信在7.0崩溃的问题
    Uri uri =Uri.parse(android.provider.MediaStore.Images.Media.insertImage(context.getContentResolver(), pic.getAbsolutePath(), "bigbang.jpg", null));
    imageUris.add(uri);
   }

   intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);
   ((Activity) context).startActivityForResult(intent, 1000);
  }catch (Throwable e){
   SnackBarUtil.show(view,R.string.share_error);
 }

还有一种方式,就是FileProvider来分享文件,操作起来稍微复杂一点,大概代码如下(代码功能是拍照的):

String mCurrentPhotoPath;

private File createImageFile() throws IOException {
 // Create an image file name
 String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
 String imageFileName = "JPEG_" + timeStamp + "_";
 File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
 File image = File.createTempFile(
  imageFileName, /* prefix */
  ".jpg",   /* suffix */
  storageDir  /* directory */
 );

 // Save a file: path for use with ACTION_VIEW intents
 mCurrentPhotoPath = "file:" + image.getAbsolutePath();
 return image;
}

static final int REQUEST_TAKE_PHOTO = 1;

private void dispatchTakePictureIntent() {
 Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
 // Ensure that there's a camera activity to handle the intent
 if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
  // Create the File where the photo should go
  File photoFile = null;
  try {
   photoFile = createImageFile();
  } catch (IOException ex) {
   // Error occurred while creating the File
   ...
  }
  // Continue only if the File was successfully created
  if (photoFile != null) {
   Uri photoURI = FileProvider.getUriForFile(this,
             "com.example.android.fileprovider",
             photoFile);
   takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
   startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
  }
 }
}

还要在manifest中声明这个FileProvider

<application>
 ...
 <provider
  android:name="android.support.v4.content.FileProvider"
  android:authorities="com.example.android.fileprovider"
  android:exported="false"
  android:grantUriPermissions="true">
  <meta-data
   android:name="android.support.FILE_PROVIDER_PATHS"
   android:resource="@xml/file_paths"></meta-data>
 </provider>
 ...
</application>

在res/xml/文件夹下新建文件file_paths.xml:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
 <external-path name="my_images" path="Android/data/com.example.package.name/files/Pictures" />
</paths>

参考:stackoverflow

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android实现合并生成分享图片功能

    有时候分享功能都是很需要分享一个当前屏幕的界面的截图因,以前做校内APP的时候用到过,拿出来分享分享, 用以前写过的自定义课表软件. Android 自定义View课程表表格 看到的是图片只显示到11节处,下面的没有显示到 所以用到的 ScrollView 因此截图节截取ScrollView View的图片 一.首先计算出整个ScrollView 的高度宽度生成对应大小的的Bitmap 然后把使用Canvas 将ScrollView 的界面绘制上去 // 获取ScrollView 实际高度 h

  • Android使用Intent.ACTION_SEND分享图片和文字内容的示例代码

    本文讲述了Android版Intent.ACTION_SEND分享图片和文字内容.分享给大家供大家参考,具体如下: 编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识.前端.后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过! 下面的方法只能实现普通的文字分享: private void shareContent() { Intent share = new Intent(android.content.Intent

  • Android系统自带分享图片功能

    简介 记录一个利用系统分享功能进行图片分享的工具类(代码是用Kotlin写的,都是比较简单的语法,部分可能需要自定义的地方都已经标出).调用方式比较简单: Util.startShareImage(this) //this为当前的Activity实例 权限 记得添加文件操作权限, 另外需要注意6.0版本以上的权限管理 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <

  • android7.0实现分享图片到朋友圈功能

    本文实例为大家分享了android实现分享图片到朋友圈功能的具体代码,供大家参考,具体内容如下 在Android7.0中,系统对scheme为file://的uri进行了限制,所以通过这种uri来进行分享的一些接口就不能用了,比如使用代码来调用分享朋友圈的接口. 此时就得使用其他的URI scheme来代替 file://,比如MediaStore的 content://.直接上代码: private static boolean checkInstallation(Context contex

  • 微信小程序实现分享到朋友圈功能

    截止到2017年11月18号,微信小程序官方还尚未开放直接分享到朋友圈的能力,但是劳动人民的智慧是伟大的,现在普遍的做法是,生成一张带有小程序码的图片,保存到用户相册,用户自行发布图片到朋友圈 我的套路: 请求后端API生成小程序码(生成小程序码需要access token,后端生成比较方便) canvas绘制文字和图片到画布 当用户点击分享到朋友圈时,给用户展示画布,画布转成图片,并将图片保存到相册 onShow: function () { var that = this; //1. 请求后

  • 微信小程序绘制图片发送朋友圈

    本文实例为大家分享了微信小程序绘制图片发送朋友圈的具体代码,供大家参考,具体内容如下 这种生成图片的效果是很常见的,实现起来也不难,跟原生js的差不多.需要注意的就是canvas标签上不要加太多的css,后果呢就是导致canvas不显示,还有呢就是canvas组件的优先级是最高的,所以会覆盖掉下面的所有内容,解决方法呢就是使用: 使用上面这两个组件是可以盖在canvas上面的. 注意:canvas绘制不支持网络图片,需要将网络图片保存成本地图片 onLoad: function(options)

  • 原生javascript实现分享到朋友圈功能 支持ios和android

    现在主流的分享工具也有很多,例如JiaThis.bShare分享,甚至一些大公司的如百度分享,但是他们依旧停留在只是在PC端的分享,对手机端的支持不是太好. 大家都知道现在很多手机端浏览器都内置了一些分享组件,像UC浏览器.QQ浏览器,内置的组件分享可以直接启动相应的APP分享,要是一个JS能调用浏览器的内置分享组件,那是多么酷啊. 高手在民间啊,下面我们的小编就带你来看看这位兄弟的编写的JS库. 一.工具介绍 nativeShare.js 一个可以通过javascript直接调用原生分享的工具

  • java开发微信分享到朋友圈功能

    微信分享功能开发 用了一天时间,把微信发送给朋友和分享到朋友圈功能开发出来,在这里给大家分享一下,避免大家走弯路. 一.服务器端程序 package com.wiimedia.controller; import java.io.IOException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.text.ParseException; import

  • android实现多图文分享朋友圈功能

    很多安卓程序员都在寻找如何调用系统分享可以实现朋友圈多图加文字分享的功能,小编经过测试入坑后,为你整理以下内容: private void shareMultiplePictureToTimeLine(File... files) { Intent intent = new Intent(); ComponentName comp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareToTim

  • Flutter实现微信朋友圈功能

    本文实例为大家分享了Flutter实现微信朋友圈功能的具体代码,供大家参考,具体内容如下 今天给大家实现一下微信朋友圈的效果,下面是效果图 下面还是老样子,还是以代码的方式进行讲解 import 'package:dio/dio.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:nursery_school_gardener/view/ma

  • Python实现九宫格式的朋友圈功能内附“马云”朋友圈

    PIL(Python Imaging Library)是一个非常强大的Python库,但是它支持Python2.X, 在Python3中则使用的是Pillow库,它是从PIL中fork出来的一个分支.提供了非常强大的图片处理能力,包括存储.格式转换.图像处理等操作 有时候看到朋友圈的九宫格动态,是不是感觉非常有逼格呢? 今天就用Python来实现九宫格切图. 先来看几张效果图 大致思路分为以下几步 1.读取初始照片 2.比较照片的宽高,数值较大的作为边长生成一个新的空白图片 3.将初始图片粘贴至

  • 微信小程序通过保存图片分享到朋友圈功能

    说明 首先说明一点,小程序内是不能直接分享到朋友圈的.所以只能通过生成图片,携带小程序二维码,保存到手机相册,让用户自己选择发到朋友圈.然后可以通过在小程序中识别二维码来进入小程序的指定页面.参考市面上支持分享的应用,基本都是这种实现方式. 准备阶段 1.通过服务器获取小程序码 这里可以参考下微信的官方文档,给后台指定的参数和路径等信息,让后台生成指定的小程序码.然后调用wx.getImageInfo将后台生成的小程序码保存起来. 注意一定要仔细看下微信的文档,如果生成小程序码的路径正式服务器不

  • 微信小程序基于Taro的分享图片功能实践详解

    前言 在各种小程序(微信.百度.支付宝).H5.NativeApp 纷纷扰扰的当下,给大家强烈安利一款基于React的多终端开发利器:京东Taro(泰罗·奥特曼),Taro致力于多终端统一解决方案,一处代码,多处运行. Taro支持以React语言开发小程序,支持CSS预处理器,支持实时编译更新,支持NPM,等等等等,简直不要太爽! 微信小程序分享图片功能是经常在小程序业务中出现的,比如学习打卡分享,推广会员分享,推广商品分享等等.因为小程序是不支持直接分享图片到朋友圈的,一般操作为: 生成包含

随机推荐