public class UmengShare {
private Activity activity = null;
private UMSocialService mController = null;
private Dialog shareDialog = null;
private Bitmap bitmapCode = null;
public UmengShare(Activity activity){
this.activity = activity;
}
public void showShareUI(String shareContent){
// 首先在您的Activity中添加如下成员变量
mController = UMServiceFactory.getUMSocialService("com.umeng.share",RequestType.SOCIAL);
// 设置分享内容
if(TextUtils.isEmpty(shareContent))
mController.setShareContent("体验最新应用");
else
mController.setShareContent(shareContent);
try {
bitmapCode = EncodingHandler.gerateLogoCode(activity,"http://www.baidu.com/", 200);
// bitmapCode = EncodingHandler.createQRCode(Const.URL.URL_SERVER_NEW, 200);
} catch (WriterException e) {
bitmapCode = null;
}
addWXShare();
addFriendCircleShare();
//设置新浪SSO handler
mController.getConfig().setSsoHandler(new SinaSsoHandler());
//设置腾讯微博SSO handler
mController.getConfig().setSsoHandler(new TencentWBSsoHandler());
mController.getConfig().removePlatform(SHARE_MEDIA.RENREN, SHARE_MEDIA.DOUBAN);
mController.getConfig().setPlatformOrder(SHARE_MEDIA.TENCENT,SHARE_MEDIA.WEIXIN,SHARE_MEDIA.SINA,SHARE_MEDIA.WEIXIN_CIRCLE);
// mController.openShare(activity, false);
shareDialog = new Dialog(activity, R.style.Theme_Dialog);
shareDialog.setContentView(R.layout.share_popup_layout);
shareDialog.setCanceledOnTouchOutside(true);
ImageView codeImage = (ImageView)shareDialog.findViewById(R.id.share_imageview);
RelativeLayout tencentShare = (RelativeLayout)shareDialog.findViewById(R.id.tencent_layout);
RelativeLayout wxShare = (RelativeLayout)shareDialog.findViewById(R.id.wx_share_layout);
RelativeLayout sinashare = (RelativeLayout)shareDialog.findViewById(R.id.sina_share_layout);
RelativeLayout circleshare = (RelativeLayout)shareDialog.findViewById(R.id.circle_share_layout);
ShareOnClickListener listener = new ShareOnClickListener();
tencentShare.setOnClickListener(listener);
wxShare.setOnClickListener(listener);
sinashare.setOnClickListener(listener);
circleshare.setOnClickListener(listener);
if(bitmapCode != null){
codeImage.setImageBitmap(bitmapCode);
mController.setShareImage(new UMImage(activity, bitmapCode));
}else{
codeImage.setBackgroundResource(R.drawable.share_qr_code_image);
}
shareDialog.show();
}
/**
* 微信
*/
private void addWXShare() {
// wx967daebe835fbeac是你在微信开发平台注册应用的AppID, 这里需要替换成你注册的AppID
String appID = "<span style="font-family: Arial, Helvetica, sans-serif;">wx967daeb35fbeac</span><span style="font-family: Arial, Helvetica, sans-serif;">";</span>
// 添加微信平台
UMWXHandler wxHandler = new UMWXHandler(activity, appID);
wxHandler.addToSocialSDK();
//设置微信好友分享内容
WeiXinShareContent weixinContent = new WeiXinShareContent();
//设置分享文字
weixinContent.setShareContent("体验最新应用,边玩边赚钱!马上入驻【星云互动】");
//设置title
weixinContent.setTitle("星云互动");
//设置分享内容跳转URL
weixinContent.setTargetUrl("http://www.scloudm.com/");
//设置分享图片
weixinContent.setShareImage(new UMImage(activity, bitmapCode));
mController.setShareMedia(weixinContent);
}
/**
* 微信朋友圈
*/
private void addFriendCircleShare() {
String appID = "wx06c10cd07a5ac0e9";
// 支持微信朋友圈
UMWXHandler wxCircleHandler = new UMWXHandler(activity, appID);
wxCircleHandler.setToCircle(true);
wxCircleHandler.addToSocialSDK();
//设置微信好友分享内容
CircleShareContent circleMedia = new CircleShareContent ();
//设置分享文字
circleMedia.setShareContent("体验最新应用,边玩边赚钱!马上入驻【星云互动】");
//设置title
circleMedia.setTitle("星云互动");
//设置分享内容跳转URL
circleMedia.setTargetUrl("http://www.scloudm.com/");
//设置分享图片
circleMedia.setShareImage(new UMImage(activity, bitmapCode));
mController.setShareMedia(circleMedia );
}
/**
* 分享
* @param shareType
*/
private void shareClick(SHARE_MEDIA shareType){
mController.postShare(activity, shareType, new SnsPostListener() {
@Override
public void onStart() {
ToastUtils.showTextToast(activity, "开始分享.");
}
@Override
public void onComplete(SHARE_MEDIA arg0, int eCode, SocializeEntity arg2) {
if(bitmapCode != null){
bitmapCode.recycle();
bitmapCode = null;
}
if (eCode == 200) {
ToastUtils.showTextToast(activity, "分享成功.");
} /*else {
String eMsg = "";
if (eCode == -101){
eMsg = "没有授权";
}
ToastUtils.showTextToast(activity, "分享失败[" + eCode + "] " + eMsg);
}*/
}
});
}
//分享按钮点击事件
protected class ShareOnClickListener implements OnClickListener{
@Override
public void onClick(View v) {
if(shareDialog != null && shareDialog.isShowing()){
shareDialog.dismiss();
}
switch (v.getId()) {
case R.id.tencent_layout:
shareClick(SHARE_MEDIA.TENCENT);
break;
case R.id.wx_share_layout:
shareClick(SHARE_MEDIA.WEIXIN);
break;
case R.id.sina_share_layout:
shareClick(SHARE_MEDIA.SINA);
break;
case R.id.circle_share_layout:
shareClick(SHARE_MEDIA.WEIXIN_CIRCLE);
break;
}
}
}
}
2、自定义布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="340dp"
android:layout_height="340dp"
android:layout_gravity="center"
android:background="@color/white" >
<TextView
android:id="@+id/tuijian_textview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/top_layout"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginTop="10dp"
android:background="@android:color/transparent"
android:text="分享给好友"
android:textColor="@color/blue_shallow"
android:textSize="@dimen/font_body_20" />
<View
android:id="@+id/line1"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_below="@id/tuijian_textview"
android:layout_marginTop="10dp"
android:background="@color/blue_shallow" />
<ImageView
android:id="@+id/share_imageview"
android:layout_width="170dp"
android:layout_height="170dp"
android:layout_marginTop="5dp"
android:layout_below="@+id/line1"
android:layout_centerHorizontal="true"
android:scaleType="fitXY" />
<TextView
android:id="@+id/load_saomiao_name"
android:layout_width="wrap_content"
android:layout_height="26dp"
android:layout_below="@+id/share_imageview"
android:layout_centerHorizontal="true"
android:layout_marginBottom="4dp"
android:background="@color/white"
android:gravity="center"
android:singleLine="true"
android:text="扫描二维码,立即下载"
android:textColor="@android:color/darker_gray"
android:textSize="14sp" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_above="@+id/share_scrollView"
android:layout_marginTop="10dp"
android:background="@color/gray_line" />
<ScrollView
android:id="@+id/share_scrollView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@android:color/transparent" >
<LinearLayout
android:id="@+id/share_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:orientation="horizontal" >
<RelativeLayout
android:id="@+id/tencent_layout"
android:layout_width="wrap_content"
android:layout_height="80dp"
android:layout_weight="1"
android:background="@drawable/umeng_socialize_shareboard_item_background" >
<ImageView
android:id="@+id/tencent_share_image"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp"
android:scaleType="fitXY"
android:background="@drawable/umeng_socialize_tx_on" />
<TextView
android:id="@+id/tencent_share_name"
android:layout_width="wrap_content"
android:layout_height="20dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="4dp"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:background="@android:color/transparent"
android:gravity="center"
android:singleLine="true"
android:text="腾讯微博"
android:textSize="12sp"
android:textColor="@color/blue_shallow" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/wx_share_layout"
android:layout_width="wrap_content"
android:layout_height="80dp"
android:layout_weight="1"
android:background="@drawable/umeng_socialize_shareboard_item_background" >
<ImageView
android:id="@+id/wx_share_image"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp"
android:scaleType="fitXY"
android:background="@drawable/umeng_socialize_wechat" />
<TextView
android:id="@+id/wx_share_name"
android:layout_width="wrap_content"
android:layout_height="20dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="4dp"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:background="@android:color/transparent"
android:gravity="center"
android:singleLine="true"
android:text="微信"
android:textSize="12sp"
android:textColor="@color/blue_shallow" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/sina_share_layout"
android:layout_width="wrap_content"
android:layout_height="80dp"
android:layout_weight="1"
android:background="@drawable/umeng_socialize_shareboard_item_background" >
<ImageView
android:id="@+id/sina_share_image"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp"
android:scaleType="fitXY"
android:background="@drawable/umeng_socialize_sina_on" />
<TextView
android:id="@+id/sina_share_name"
android:layout_width="wrap_content"
android:layout_height="20dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="4dp"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:background="@android:color/transparent"
android:gravity="center"
android:singleLine="true"
android:text="新浪微博"
android:textSize="12sp"
android:textColor="@color/blue_shallow" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/circle_share_layout"
android:layout_width="wrap_content"
android:layout_height="80dp"
android:layout_weight="1"
android:background="@drawable/umeng_socialize_shareboard_item_background" >
<ImageView
android:id="@+id/circle_share_image"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp"
android:scaleType="fitXY"
android:background="@drawable/umeng_socialize_wxcircle" />
<TextView
android:id="@+id/circle_share_name"
android:layout_width="wrap_content"
android:layout_height="20dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="4dp"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:background="@android:color/transparent"
android:gravity="center"
android:singleLine="true"
android:text="朋友圈"
android:textSize="12sp"
android:textColor="@color/blue_shallow" />
</RelativeLayout>
</LinearLayout>
</ScrollView>
</RelativeLayout>
3、生成二维码图片
public final class EncodingHandler {
private static final int BLACK = 0xff000000;
private static final int WHITE = 0xffffffff;
public static Bitmap createQRCode(String str,int widthAndHeight) throws WriterException {
Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
BitMatrix matrix = new MultiFormatWriter().encode(str,
BarcodeFormat.QR_CODE, widthAndHeight, widthAndHeight);
int width = matrix.getWidth();
int height = matrix.getHeight();
int[] pixels = new int[width * height];
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
if (matrix.get(x, y)) {
pixels[y * width + x] = BLACK;
}else { // 无信息设置像素点为白色
pixels[y * width + x] = WHITE;
}
}
}
Bitmap bitmap = Bitmap.createBitmap(width, height,
Bitmap.Config.ARGB_8888);
bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
return bitmap;
}
public static Bitmap createQRCodeWithLogo(Context context, String str,
int widthAndHeight) throws WriterException {
QRCodeWriter writer = new QRCodeWriter();
Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
BitMatrix bitMatrix = new QRCodeWriter().encode(str,
BarcodeFormat.QR_CODE, widthAndHeight, widthAndHeight, hints);
int[] pixels = new int[widthAndHeight * widthAndHeight];
Bitmap[] bitmaps = new Bitmap[2];
bitmaps[1] = BitmapFactory.decodeResource(context.getResources(),
R.drawable.qrcode_logo);// logo图标
int imageW = bitmaps[1].getWidth();
int imageH = bitmaps[1].getHeight();
int startW = widthAndHeight / 2 - imageW / 2;
int starH = widthAndHeight / 2 - imageH / 2;
for (int y = 0; y < widthAndHeight; y++) {
for (int x = 0; x < widthAndHeight; x++) {
if ((x <= startW || x >= starH + imageW)
|| (y <= starH || y >= +imageH)) {
if (bitMatrix.get(x, y)) {
pixels[y * widthAndHeight + x] = BLACK;
}
} else {
}
}
}
Bitmap bitmap = Bitmap.createBitmap(widthAndHeight, widthAndHeight,
Bitmap.Config.ARGB_8888);
bitmap.setPixels(pixels, 0, widthAndHeight, 0, 0, widthAndHeight, widthAndHeight);
bitmaps[0] = bitmap;
Bitmap bm = combineBitmaps(bitmaps, startW, starH);
return bm;
}
private static Bitmap combineBitmaps(Bitmap[] bitmaps, int w, int h) {// 添加logo
Bitmap newBitmap = Bitmap.createBitmap(bitmaps[0].getWidth(),
bitmaps[0].getHeight(), Config.ARGB_8888);
Canvas cv = new Canvas(newBitmap);
for (int i = 0; i < bitmaps.length; i++) {
if (i == 0) {
cv.drawBitmap(bitmaps[0], 0, 0, null);
} else {
cv.drawBitmap(bitmaps[i], w, h, null);
}
cv.save(Canvas.ALL_SAVE_FLAG);
cv.restore();
}
return newBitmap;
}
public static Bitmap gerateLogoCode(Context context, String str,
int widthAndHeight) throws WriterException{
if(!TextUtils.isEmpty(str)){
//根据字符串生成二维码图片并显示在界面上,第二个参数为图片的大小(600*600)
Bitmap qrCodeBitmap = createQRCode(str, widthAndHeight);
//------------------添加logo部分------------------//
Bitmap logoBmp = BitmapFactory.decodeResource(context.getResources(), R.drawable.qrcode_logo);
//二维码和logo合并
Bitmap bitmap = Bitmap.createBitmap(qrCodeBitmap.getWidth(), qrCodeBitmap
.getHeight(), qrCodeBitmap.getConfig());
Canvas canvas = new Canvas(bitmap);
//二维码
canvas.drawBitmap(qrCodeBitmap, 0,0, null);
//logo绘制在二维码中央
canvas.drawBitmap(logoBmp, qrCodeBitmap.getWidth() / 2
- logoBmp.getWidth() / 2, qrCodeBitmap.getHeight()
/ 2 - logoBmp.getHeight() / 2, null);
return bitmap;
}
return null;
}
}
4、微信自定义分享回调
public class WXEntryActivity extends WXCallbackActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
//微信发送的请求将回调到onReq方法
@Override
public void onReq(BaseReq req) {
super.onReq(req);
// ToastUtils.showTextToast(this, "WXEntryActivity onReq");
System.out.println("WXEntryActivity onReq");
}
//发送到微信请求的响应结果将回调到onResp方法
@Override
public void onResp(BaseResp resp) {
super.onResp(resp);
// ToastUtils.showTextToast(this, "WXEntryActivity onResp");
System.out.println("WXEntryActivity onResp");
}
}