sharesdk第三方分享功能(微博微信朋友圈QQ郵箱)
阿新 • • 發佈:2019-02-12
//需要引入sharesdk和在微博微信QQ提供的第三方平臺上申請賬號,請自行查閱sharesdk官方文件 //用於分享的資料,自行根據需求進行設定 public class ShareModel { private String address; private String img; private String title; private String txt; public String getTitle() { return title; } public ShareModel(String address, String img, String title, String txt) { this.address = address; this.img = img; this.txt = txt; this.title = title; } public String getAddress() { return address; } public String getImg() { return img; } public String getTxt() { return txt; } }
public class ShareUtil { private static Context mContext; private static String shareToastTxt; public void doShare(Context context, final ShareModel ShareModel) { this.mContext = context; final ShareCallBack shareCallBack = new ShareCallBack(); final ShareDialog ShareDialog = new ShareDialog(context); ShareDialog.setCancelButtonOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ShareDialog.dismiss(); } }); ShareDialog.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { HashMap<String, Object> item = (HashMap<String, Object>) arg0.getItemAtPosition(arg2); //設定分享內容 Platform.ShareParams sp = new Platform.ShareParams(); sp.setShareType(Platform.SHARE_WEBPAGE); sp.setText(ShareModel.getTxt()); //微信郵箱和QQ空間使用 sp.setTitle(ShareModel.getTitle()); //分享文字 sp.setTitleUrl(ShareModel.getAddress()); //網路圖片rul sp.setImageUrl(ShareModel.getImg()); //僅在QQ空間使用 sp.setTitleUrl(ShareModel.getAddress()); //僅在微信使用 sp.setUrl(ShareModel.getAddress()); //僅在QQ空間使用 sp.setSite(ShareModel.getTitle()); sp.setSiteUrl(ShareModel.getAddress()); if (item.get("ItemText").equals("微博")) { Platform sinaWeibo = ShareSDK.getPlatform(SinaWeibo.NAME); shareToastTxt = "微博"; sinaWeibo.setPlatformActionListener(shareCallBack); // 設定分享事件回撥 // 執行分享 sinaWeibo.share(sp); } else if (item.get("ItemText").equals("微信好友")) { Platform wechat = ShareSDK.getPlatform(Wechat.NAME); shareToastTxt = "微信"; wechat.setPlatformActionListener(shareCallBack); // 設定分享事件回撥 // 執行分享 wechat.share(sp); } else if (item.get("ItemText").equals("朋友圈")) { Platform wechatMoments = ShareSDK.getPlatform(WechatMoments.NAME); shareToastTxt = "朋友圈"; wechatMoments.setPlatformActionListener(shareCallBack); // 設定分享事件回撥 // 執行分享 wechatMoments.share(sp); } else if (item.get("ItemText").equals("QQ好友")) { Platform qq = ShareSDK.getPlatform(QQ.NAME); shareToastTxt = "QQ"; qq.setPlatformActionListener(shareCallBack); // 設定分享事件回撥 // 執行分享 qq.share(sp); } else if (item.get("ItemText").equals("QQ空間")) { Platform qzone = ShareSDK.getPlatform(QZone.NAME); shareToastTxt = "空間"; qzone.setPlatformActionListener(shareCallBack); // 設定分享事件回撥 // 執行分享 qzone.share(sp); } else if (item.get("ItemText").equals("郵箱")) { //設定分享內容 Platform.ShareParams sp1 = new Platform.ShareParams(); sp1.setShareType(Platform.SHARE_TEXT); sp1.setTitle(ShareModel.getTitle()); sp1.setText(ShareModel.getTxt()+" "+ ShareModel.getAddress()); Platform email = ShareSDK.getPlatform(Email.NAME); shareToastTxt = "郵箱"; email.setPlatformActionListener(shareCallBack); // 設定分享事件回撥 // 執行分享 email.share(sp1); } else if(item.get("ItemText").equals("複製連結")) { ClipboardManager cm = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE); // 將文字內容放到系統剪貼簿裡。 cm.setText(ShareModel.getAddress()); Toast.makeText(mContext, "複製成功", Toast.LENGTH_LONG).show(); } ShareDialog.dismiss(); } }); } //分享回撥 private static class ShareCallBack implements PlatformActionListener { @Override public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) { Toast.makeText(mContext,shareToastTxt+"分享成功",Toast.LENGTH_SHORT).show(); } @Override public void onError(Platform platform, int i, Throwable throwable) { Toast.makeText(mContext,shareToastTxt+"分享失敗",Toast.LENGTH_SHORT).show(); Log.e("share_error",throwable.toString()); } @Override public void onCancel(Platform platform, int i) { Toast.makeText(mContext,shareToastTxt+"分享取消",Toast.LENGTH_SHORT).show(); } } }
public class ShareDialog { private Dialog dialog; private GridView gridView; private RelativeLayout cancelButton; private SimpleAdapter saImageItems; //此處是分享dialog用到的七個圖片,存放順序與下方name相對應的順序需要保持一致,請自行根據美工提供的圖片進行替換 private int[] image = {R.drawable.share_sina, R.drawable.share_wx, R.drawable.share_friend, R.drawable.share_qq,R.drawable.share_qzne,R.drawable.share_email,R.drawable.share_copyline}; private String[] name = {"微博", "微信好友", "朋友圈", "QQ好友","QQ空間","郵箱","複製連結"}; public ChShareDialog(Context context) { dialog = new Dialog(context,R.style.MyAnimDialog); dialog.show(); dialog.setCanceledOnTouchOutside(true); Window window = dialog.getWindow(); window.setContentView(R.layout.ch_share_dialog); if (window != null) { window.getDecorView().setPadding(0, WidgetUtil.dip2px(context,5), 0,0); WindowManager.LayoutParams attr = window.getAttributes(); if (attr != null) { attr.height = ViewGroup.LayoutParams.WRAP_CONTENT; attr.width = ViewGroup.LayoutParams.MATCH_PARENT; //設定dialog 在佈局中的位置 attr.gravity = Gravity.BOTTOM; window.setAttributes(attr); } } gridView = (GridView) window.findViewById(R.id.share_gridView); cancelButton = (RelativeLayout) window.findViewById(R.id.share_cancel); List<HashMap<String, Object>> shareList = new ArrayList<HashMap<String, Object>>(); for (int i = 0; i < image.length; i++) { HashMap<String, Object> map = new HashMap<String, Object>(); map.put("ItemImage", image[i]);//新增影象資源的ID map.put("ItemText", name[i]);//按序號做ItemText shareList.add(map); } saImageItems = new SimpleAdapter(context, shareList, R.layout.ch_share_item, new String[]{"ItemImage", "ItemText"}, new int[]{R.id.imageView1, R.id.textView1}); gridView.setAdapter(saImageItems); } public void setCancelButtonOnClickListener(OnClickListener Listener) { cancelButton.setOnClickListener(Listener); } public void setOnItemClickListener(OnItemClickListener listener) { gridView.setOnItemClickListener(listener); } /** * 關閉對話方塊 */ public void dismiss() { dialog.dismiss(); } }
//用於解析度轉化,dp與px的相互轉化
public class WidgetUtil
{
/**
* 根據手機的解析度從 dp 的單位 轉成為 px(畫素)
*/
public static int dip2px(Context context, float dpValue)
{
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* 根據手機的解析度從 px(畫素) 的單位 轉成為 dp
*/
public static int px2dip(Context context, float pxValue)
{
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
}
//分享dialog用到的動畫效果,請複製貼上至styles檔案內
<style name="MyAnimDialog" parent="android:Theme.Dialog">
<!-- 背景顏色及透明程度 -->
<item name="android:windowBackground">@android:color/transparent</item>
<!-- 是否半透明 -->
<item name="android:windowIsTranslucent">false</item>
<!-- 是否沒有標題 -->
<item name="android:windowNoTitle">true</item>
<!-- 是否浮現在activity之上 -->
<item name="android:windowIsFloating">true</item>
<!-- 是否背景模糊 -->
<item name="android:backgroundDimEnabled">true</item>
<!-- 設定背景模糊的透明度-->
<item name="android:backgroundDimAmount">0.5</item>
<!-- 動畫 -->
<item name="android:windowAnimationStyle">@style/dialog_animation</item>
</style>
<!-- 對話方塊顯示和退出動畫 -->
<style name="dialog_animation">
<item name="android:windowEnterAnimation">@anim/dialog_enter</item>
<item name="android:windowExitAnimation">@anim/dialog_exit</item>
</style>
// dialog_exit.xml 放入anim資料夾下
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="200"
android:fillAfter="true"
android:fromYDelta="0%"
android:toYDelta="100%p"/>
</set>
// dialog_enter.xml 放入anim資料夾下
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="200"
android:fillAfter="true"
android:fromYDelta="100%p"
android:toYDelta="0%"/>
</set>
// share_dialog.xml shareDialog的佈局檔案,請自行放入layout資料夾
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#00ffffff"
android:layout_gravity="bottom"
android:orientation="vertical">
<GridView
android:paddingTop="20dp"
android:id="@+id/share_gridView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:background="@color/white"
android:gravity="center"
android:horizontalSpacing="1dp"
android:listSelector="@android:color/transparent"
android:numColumns="4"
android:verticalSpacing="10dp"></GridView>
<RelativeLayout
android:id="@+id/share_cancel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_below="@+id/share_gridView"
android:gravity="center"
android:padding="5dp"
android:background="@color/white"
android:visibility="visible">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="10dp"
android:layout_marginTop="10dp"
android:text="取消"
android:textColor="@color/black"
android:textSize="16sp" />
</RelativeLayout>
</RelativeLayout>
使用方法:
ShareModel shareModel = new ShareModel();
shareModel.set...;//根據需要設定四個引數
ShareUtil.doShare(context,shareModel); //到此就OK啦,放到你按鍵響應事件下即可