自從微信升級到6.7.3後,就不再支持內部的多圖分享了。但是我們還需要分享多張圖片到微信朋友圈這時候怎麼辦呢
方法一
1.在分享微信朋友圈的時候把圖片保存在本地 文字複製在粘貼板上,然後彈一個框 提示用戶手動打開微信朋友圈 手動去選擇照片手動去 粘貼文字。
方法二:
方法二的方法更加人性化。
首先 在build添加 implementation 'com.sch.share:wx-share:1.0.6' 依賴
添加權限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
配置
在 strings.xml 中自定義無障礙服務標籤。
<string name="wx_share_multi_image_service_label">demo名字【多圖分享】</string>
注意:
微信 v6.7.3 分享步驟
若用戶未打開無障礙服務:自動跳轉圖文分享界面,並提示用戶粘貼文字選擇圖片。
若用戶已打開無障礙服務:自動跳轉圖文分享界面,自動粘貼文字選擇圖片。
微信 v7.0.0 分享步驟
若用戶未打開無障礙服務:自動跳轉微信,並提示用戶打開朋友圈粘貼文字選擇圖片。
若用戶已打開無障礙服務:自動跳轉微信,若當前微信處於一級頁面(聊天列表、聯繫人、發現、我),自動打開發現-朋友圈-從相冊選擇-圖文分享-粘貼文字。 若微信處於非一級頁面,則需用戶手動返回一級頁面觸發上述流程。
清理臨時文件
分享時會產生臨時文件,每次分享前都會清理臨時所屬文件夾,也可以在特定時間調用 API 清理。
WXShareMultiImageHelper.clearTmpFile(activity)
相關代碼如下:
public class MainActivity extends AppCompatActivity {
@BindView(R.id.iv_one)
ImageView ivOne;
@BindView(R.id.iv_two)
ImageView ivTwo;
@BindView(R.id.iv_three)
ImageView ivThree;
@BindView(R.id.button_one)
Button buttonOne;
@BindView(R.id.button_two)
Button buttonTwo;
private String url = "https://img-my.csdn.net/uploads/201407/26/1406383290_9329.jpg";
List<String>listdata=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
initImg();
initViewListing();
//訪問權限
requestStoragePermission();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
requestStoragePermission();
}
}
private void initImg(){
for(int i=0;i<3;i++) {
listdata.add(url);
}
//加載圖片
GlideUtils.lImg(this, url, ivOne);
GlideUtils.lImg(this, url, ivTwo);
GlideUtils.lImg(this, url, ivThree);
}
private void initViewListing() {
buttonOne.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//分享到微信好友
loadImage(new OnLoadImageEndCallback() {
@Override
public void onEnd(List<Bitmap> bitmapList) {
shareToSession(bitmapList,"分享給微信好友");
}
});
}
});
buttonTwo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//分享到微信朋友圈
loadImage(new OnLoadImageEndCallback() {
@Override
public void onEnd(List<Bitmap> bitmapList) {
shareToTimeline(bitmapList,"分享給微信朋友圈");
}
});
}
});
}
private void requestStoragePermission() {
// 申請內存權限。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
!WXShareMultiImageHelper.hasStoragePermission(this)) {
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
}
}
// 分享給好友。
private void shareToSession(List<Bitmap> bitmapList,String content) {
WXShareMultiImageHelper.shareToSession(this, bitmapList, content);
}
// 分享到朋友圈。
private void shareToTimeline(List<Bitmap> bitmapList,String content) {
WXShareMultiImageHelper.shareToTimeline(this, bitmapList, content);
}
private void loadImage(final OnLoadImageEndCallback callback) {
final ProgressDialog dialog = new ProgressDialog(this);
dialog.setMessage("正在加載圖片...");
dialog.show();
new Thread(new Runnable() {
@Override
public void run() {
List<Bitmap> bitmapList = new ArrayList<>();
for (String url : listdata) {
bitmapList.add(returnBitMap(url));
}
runOnUiThread(new Runnable() {
@Override
public void run() {
dialog.cancel();
}
});
callback.onEnd(bitmapList);
}
}).start();
}
private interface OnLoadImageEndCallback {
void onEnd(List<Bitmap> bitmapList);
}
public Bitmap returnBitMap(final String url){
Bitmap bitmap=null;
URL imageurl = null;
try {
imageurl = new URL(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
HttpURLConnection conn = (HttpURLConnection)imageurl.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(is);
is.close();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
}
可以參考:
https://github.com/shichaohui/WXShareMultiImage