Android 实现多图分享到微信朋友圈

原创 2017年11月09日 12:18:32

1.初始的步骤可以先参考:
Android 实现微信分享好友和朋友圈
http://blog.csdn.net/unique_even/article/details/71717368

2.刚开始我采用微信开放平台给出的接口来分享图片,但是只能分享一张,之后各种搜索,找到了新的思路(可以参考下:http://blog.csdn.net/qq_27030835/article/details/50828352),是先把图片缓存下来,之后在去分享。

1.ShareActivity 类

public class ShareActivity  extends Activity{
    private Button mButtonGetValue; // 获取数据按钮
    private GridView mListView;// 数据展示列表
    private CheckboxAdapter listItemAdapter; // ListView数据展示适配器
    private ArrayList<HashMap<String, Object>> listData;// ListView展示数据源
    private WeChatShareUtil weChatShareUtil;
    Context context;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.z_shareactivity);
        context = this;
        initView();
        registerListener();
        listData = new ArrayList<HashMap<String, Object>>();
        initListViewData(listData);
        loadData();
        weChatShareUtil = WeChatShareUtil.getInstance(this);

    }

    /**
     * 初始化布局
     */
    private void initView() {
        mButtonGetValue = (Button) findViewById(R.id.get_value);
        mListView = (GridView) findViewById(R.id.list);
    }

    private void registerListener() {
        mButtonGetValue.setOnClickListener((View.OnClickListener) new OnClickListenerImpl());
    }

    /**
     * 加载数据
     */
    private void loadData() {
        listItemAdapter = new CheckboxAdapter(this, listData);
        mListView.setAdapter(listItemAdapter);
    }

    /**
     * 初始化ListView数据源
     *
     * @param listData
     */
    private void initListViewData(ArrayList<HashMap<String, Object>> listData) {
        if (listData == null)
            listData = new ArrayList<HashMap<String, Object>>();
        for (int i = 0; i < 12; i++) {
            HashMap<String, Object> map = new HashMap<String, Object>();
            map.put("friend_image", "http://imgsrc.baidu.com/imgad/pic/item/b58f8c5494eef01f4b2237c5eafe9925bc317dff.jpg");
            map.put("selected", false);
            // 向容器添加数据
            listData.add(map);
        }
    }




    private class OnClickListenerImpl implements View.OnClickListener {

        @Override
        public void onClick(View v) {
            new Thread(saveFileRunnable).start();
        }
    }

    private Runnable saveFileRunnable = new Runnable(){
        @Override
        public void run() {
            try {
                List<HashMap<String, Object> >sList = new ArrayList<HashMap<String, Object>>();
                HashMap<String, Object>  s = new HashMap<String, Object>();
                    int IMAGE_NAME = 0;
                for(int i=0;i<listItemAdapter.getNumdata().size();i++){
                    IMAGE_NAME++;
                    String imageFileName = Integer.toString(IMAGE_NAME) + ".jpg";
                    s = listItemAdapter.getState().get(listItemAdapter.getNumdata().get(i).get("position"));
                    SavePhoto.downloadLyWithName((String)s.get("friend_image"),imageFileName, "phone", context);
                }
                // 遍历 SD 卡下 .png 文件通过微信分享
                File file = new File(Environment.getExternalStorageDirectory() + "/BangMai/images/" + "phone");
                File[] files = file.listFiles(new FileFilter() {
                    @Override
                    public boolean accept(File pathname) {
                        if (pathname.getName().endsWith(".jpg")) {
                            return true;
                        }
                        return false;
                    }
                });

                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/*");
                ArrayList<Uri> imageUris = new ArrayList<Uri>();
                for (File f : files) {
                    imageUris.add(Uri.fromFile(f));
                }
                intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);
                intent.putExtra("Kdescription", "测试");  // 这里可要可不要,这句话的意思是直接会显示在发表时候的文字
                startActivity(intent);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    };
}

CheckboxAdapter 类

public class CheckboxAdapter extends BaseAdapter{
    private Context context;
    private ArrayList<HashMap<String, Object>> listData;

    public ArrayList<HashMap<String, Object>> getNumdata() {
        return numdata;
    }

    public void setNumdata(ArrayList<HashMap<String, Object>> numdata) {
        this.numdata = numdata;
    }

    ArrayList<HashMap<String, Object>> numdata = new ArrayList<>();
    HashMap<String, Object>  num = new HashMap();




    public HashMap<Integer, HashMap<String, Object>> getState() {
        return state;
    }
//
    public void setState(HashMap<Integer, HashMap<String, Object>> state) {
        this.state = state;
    }

    //checkbox选中的数据
    HashMap<Integer, HashMap<String, Object>> state = new HashMap<Integer, HashMap<String, Object>>();

    // 构造方法初始化数据
    public CheckboxAdapter(Context context, ArrayList<HashMap<String, Object>> listData) {
        this.context = context;
        this.listData = listData;
    }

    @Override
    public int getCount() {
        return (listData != null && !listData.isEmpty())?listData.size():0;
    }

    @Override
    public Object getItem(int position) {
        return listData.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        LayoutInflater mInflater = LayoutInflater.from(context);
        convertView = mInflater.inflate(R.layout.z_item_list, null);
        ImageView image = (ImageView) convertView.findViewById(R.id.friend_image);
        final HashMap<String, Object> viewData = listData.get(position);
        ImageLoaders.display(context, image, (String) viewData.get("friend_image"), R.drawable.add_nor);
        CheckBox check = (CheckBox) convertView.findViewById(R.id.selected);
        check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    state.put(position, viewData);
                    num.put("position",position);
                    numdata.add(num);

                } else {
                    state.remove(position);
                    num.remove(position);

                }
            }
        });
        check.setChecked((state.get(position) == null ? false : true));

        return convertView;
    }
}

SavePhoto类(保存图片的)

public class SavePhoto {

    //保存带名称的图片
    public static Boolean downloadLyWithName(String url, String imgName, String fileName, Context context) throws Exception {
        Bitmap bitmap = null;
        byte [] data = getImage(url);
        if(data!=null){
            bitmap = BitmapFactory.decodeByteArray(data,0,data.length);
            saveImgWithName(bitmap,imgName,fileName,context);
            return true;
        }else {
            return  false;

        }

    }


    public static byte[] getImage(String path) throws Exception {
        URL url = new URL(path);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setConnectTimeout(5*1000);
        conn.setRequestMethod("GET");
        InputStream inStream = conn.getInputStream();
        if(conn.getResponseCode()==HttpURLConnection.HTTP_OK){
            return readStream(inStream);
        }
            return null;


    }

    public static byte[] readStream(InputStream inStream) throws Exception{
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len = 0;
        while( (len=inStream.read(buffer)) != -1){
            outStream.write(buffer, 0, len);
        }
        outStream.close();
        inStream.close();
        return outStream.toByteArray();
    }

    //保存图片带名称
    private static void saveImgWithName(Bitmap bitmap, String imgName, String fileName, Context context) {
        if (bitmap != null) {
            File appDir = new File(Environment.getExternalStorageDirectory() + "/BangMai/");
            if (!appDir.exists()) {
                appDir.mkdirs();
            }
            if (fileName != null) {
                appDir = new File(Environment.getExternalStorageDirectory() + "/BangMai/images/" + fileName);
                if (!appDir.exists()) {
                    appDir.mkdirs();
                }
            }
            File file = null;
            file = new File(appDir, imgName);
            try {
                FileOutputStream fos = new FileOutputStream(file);
                if (null != fos) {
                    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
                    fos.flush();
                    fos.close();
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

z_item_list 布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RelativeLayout"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:paddingBottom="4dip"
    android:paddingRight="12dip" >

    <ImageView
        android:id="@+id/friend_image"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:paddingLeft="2dip"
        android:paddingTop="6dip" />

    <CheckBox
        android:id="@+id/selected"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_marginLeft="36dip"
        android:focusable="false" />



</RelativeLayout>

z_shareactivity 布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/get_value"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="微信分享" />


    <GridView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:numColumns="3"
        />

</LinearLayout>
版权声明:本文为博主原创文章,未经博主允许不得转载。

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

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

Android应用实现微信分享(微信好友,朋友圈),分享链接,图片,文字

本次和大家分享这几天一直在研究的微信(微信好友,朋友圈)分享,以及近期以来的学习心得!...
  • small_and_smallworld
  • small_and_smallworld
  • 2017年09月04日 14:14
  • 1722

android 分享到微信朋友圈或微信好友

安卓应用中的内容分享到微信朋友圈或者微信还有
  • chang1611
  • chang1611
  • 2016年08月17日 11:08
  • 410

Android实现分享内容到微信朋友圈

由于需求,要实现在应用中实现分享文字+图片到微信朋友圈。在网上找了一些资料,总结如下: 思路 1.使用android的intent实现应用程序之间的通信,将信息通过intent传递给微信(文章后面资源...
  • yanwushu
  • yanwushu
  • 2014年05月29日 12:15
  • 25092

app 多图片分享至微信朋友圈

由于微信分享的sdk 只能一张图片,大多数情况想展示多个图片,怎么办?     private static void shareMultiplePicture(Context context, Fi...
  • iloveyoueveryday
  • iloveyoueveryday
  • 2016年04月05日 18:12
  • 747

Android集成shareSdk进行微信和微信朋友圈的分享

shareSdk的微信分享
  • aino0613
  • aino0613
  • 2017年10月19日 12:55
  • 274

Android同时分享多张图片和文字到微信朋友圈

网上找了很多资料,试了之后都是提示”获取资源失败,仅支持分享照片至朋友圈“等等,后来测试发现是需要Uri的list才行 private void shareImage(String kdescri...
  • xiaokz
  • xiaokz
  • 2017年03月01日 12:06
  • 1555

android应用中分享到微信好友和朋友圈的实现

前言实现分享到微信好友和朋友圈的功能其实很简单,官方文档其实还是比较详细的,只是在创建应用的过程比较费(dan)事(teng),好在微信的审核效率还可以,所以这篇博客简单为大家介绍下这个功能的实现,同...
  • Reed_CSDN
  • Reed_CSDN
  • 2016年03月26日 17:17
  • 13898

微信分享多个图片和文字到朋友圈

在微信的官网文档中,只有单个的图片分享和单独的文字分享,不然就是web类型的分享,而有时候我们需要的是像发朋友圈那样,直接发布文字和图片,不需要任何的链接。但是微信api是不支持这种的,那我们是如何做...
  • nibinusm22b
  • nibinusm22b
  • 2016年05月22日 09:56
  • 5812

微信分享api一次发送多张图片到朋友圈

通过微信提供的api是暂时只能实现分享一张图片,如果想分享多张只能
  • mingyue_1128
  • mingyue_1128
  • 2014年10月13日 10:02
  • 4614
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 实现多图分享到微信朋友圈
举报原因:
原因补充:

(最多只允许输入30个字)