利用Intent一键分享图片文字到微信

  这个功能在网上也很多,实现的原理都一样,但因为Android 7.0 的访问文件的权限问题,按照以前的方法是执行不了的,所以在这里做了一下适配,在小米Android7.0版本运行效果如下:

主要代码:

     public static void shareWithImage(Context context, String kdescription, ArrayList paths){
        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.setType("image/*");
        ComponentName comp = new ComponentName("com.tencent.mm",
                "com.tencent.mm.ui.tools.ShareToTimeLineUI");
        intent.setComponent(comp);
        intent.setAction("android.intent.action.SEND_MULTIPLE");
        //多图片分享
        intent.setType("image/*");
        //这个是分享文字描述
        intent.putExtra("Kdescription", kdescription);
        //file类型的文件路径
        intent.putExtra(Intent.EXTRA_STREAM, paths);
        context.startActivity(intent);

    }

要先下载图片保存到本地在读取图片,才可以成功分享出去的,把它封装成一个工具类如下:

“`
public class ShareMultiImageToWeChatUtil {

//保存文件到指定路径
public static Uri saveImageToGallery(Context context, Bitmap bmp) {
    /**
     *适配7.0访问不了file文件的问题,用provider是不行的,会报分享的图片路径格式不正确的错误
     * 这段是去掉7.0通过FileProvider的文件访问,方便把图片分享到朋友圈
     */
    StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
    StrictMode.setVmPolicy(builder.build());
    builder.detectFileUriExposure();

    // 首先保存图片

    String fileName = System.currentTimeMillis() + ".jpg";
   File mFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "shareImages", fileName);
    if (!mFile.getParentFile().exists()) {
        mFile.getParentFile().mkdirs();
    }


    try {
        FileOutputStream fos = new FileOutputStream(mFile);
        //通过io流的方式来压缩保存图片
        boolean isSuccess = bmp.compress(Bitmap.CompressFormat.JPEG, 60, fos);
        fos.flush();
        fos.close();
        Uri uri = Uri.fromFile(mFile); 
        // 保存图片后发送广播通知更新数据库,其次把文件插入到系统图库
        try {
            MediaStore.Images.Media.insertImage(context.getContentResolver(),
                    mFile.getAbsolutePath(), fileName, null);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        // 最后通知图库更新
        context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));
        return uri;
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

/**
 * 
 * @param context 上下文
 * @param kdescription 分享的标题描述
 * @param paths 图片路径
 */
public static void shareWithImage(Context context, String kdescription, ArrayList paths) {
    Intent intent = new Intent(Intent.ACTION_SEND);
    ComponentName comp = new ComponentName("com.tencent.mm",
            "com.tencent.mm.ui.tools.ShareToTimeLineUI");
    intent.setComponent(comp);
    intent.setAction("android.intent.action.SEND_MULTIPLE");
    intent.setType("image/*");
    intent.putExtra("Kdescription", kdescription);
    intent.putExtra(Intent.EXTRA_STREAM, paths);
    context.startActivity(intent);

}



/**不实用微信sdk检查是否安装微信
 * @param context
 * @return
 */
public static boolean isInstallWeChart(Context context){
    PackageInfo packageInfo = null;
    try {
        packageInfo = context.getPackageManager().getPackageInfo("com.tencent.mm", 0);
    } catch (Exception e) {
        packageInfo = null;
        e.printStackTrace();
    }
    if (packageInfo == null) {
        return false;
    } else {
        return true;
    }
}

}

小demo的地址:https://github.com/Xiaohy61/ShareImagesToWeChat


你可能感兴趣的:(android)