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 imageUris = new ArrayList();
   // 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


 ...
 
  
 
 ...

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

<?xml version="1.0" encoding="utf-8"?>

 

参考:stackoverflow

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


网站名称:android7.0实现分享图片到朋友圈功能
网页网址:http://cdiso.cn/article/pjddoi.html

其他资讯