一、概述
最近一个老项目要添加易信分享功能,原项目使用的是eclipse开发,项目之前的分享用的第三方分享ShareSdk,于是基于ShareSdk我编写了一个Demo来测试该功能。
ShareSdk官网:http://www.mob.com/
还没有账号的需要注册一个账号
易信开发平台:http://open.yixin.im/
需要自己注册账号,账号注册成功后需要提交自己的应用信息,当然这里的应用必须是已经上线了的应用,需要填写应用的市场下载地址,还有一个就是提前准备好应用的签名信息,需要自己下载应用签名工具获取。
二、实现效果图
1.主界面
2.易信好友分享
3.易信朋友圈分享
三、核心代码
MainActivity.java:
package com.czhappy.kuaizhi;
import java.util.HashMap;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.LinearLayout;
import android.widget.Toast;
import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.PlatformActionListener;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.yixin.friends.Yixin;
import cn.sharesdk.yixin.friends.Yixin.ShareParams;
import cn.sharesdk.yixin.moments.YixinMoments;
public class MainActivity extends Activity implements OnClickListener, ShareThreadListener{
private LinearLayout yx_friend_layout;
private LinearLayout yx_circle_layout;
private Handler handler = new Handler();
private ShareThreadListener threadListener = this;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ShareSDK.initSDK(this);
initView();
}
private void initView() {
yx_friend_layout = (LinearLayout) this.findViewById(R.id.yx_friend_layout);
yx_friend_layout.setOnClickListener(this);
yx_circle_layout = (LinearLayout) this.findViewById(R.id.yx_circle_layout);
yx_circle_layout.setOnClickListener(this);
}
@Override
public void onClick(View v) {
String imgPath =
switch (v.getId()) {
case R.id.yx_friend_layout:
shareYX(1, "title易信好友分享", "content易信好友分享", imgPath, url, 111);
break;
case R.id.yx_circle_layout:
shareYX(2, "title易信好友分享", "content易信好友分享", imgPath, url, 222);
break;
default:
break;
}
}
public void shareYX(int shareType, String title, String content, String imgPath, String url,int shareTypeId){
String name = "";
int res = 0;
switch(shareType){
case 1:
name = Yixin.NAME;
res = R.string.yixin_client_inavailable;
break;
case 2:
name = YixinMoments.NAME;
res = R.string.yixin_client_inavailable;
break;
}
shareYX(title, content, imgPath, url, name, res);
}
public void shareYX(String title, String content, String imagePath, String url, String name, int res){
Platform yx = ShareSDK.getPlatform(this, name);
if(checkValid(yx, res)){
ShareParams sp = new ShareParams();
sp.setTitle(title);
sp.setText(content);
//网页分享
sp.setShareType(Platform.SHARE_WEBPAGE);
sp.setUrl(url);
sp.setImageUrl(imagePath);
yx.setPlatformActionListener(shareListener); // 设置分享事件回调
// 执行图文分享
yx.share(sp);
}
}
/**
* 验证有效性
* @param p
* @param res
* @return
*/
private boolean checkValid(Platform p, final int res){
if(!p.isValid()){
handler.post(new Runnable() {
@Override
public void run() {
threadListener.onMsg(res);
}
});
return false;
}
return true;
}
@Override
public void onError(Platform plat, int action, Throwable t) {
Toast.makeText(MainActivity.this, "分享失败", Toast.LENGTH_SHORT).show();
}
@Override
public void onComplete(Platform plat, int action,
HashMap<String, Object> res) {
Toast.makeText(MainActivity.this, "分享完成", Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel(Platform plat, int action) {
Toast.makeText(MainActivity.this, "分享取消", Toast.LENGTH_SHORT).show();
}
@Override
public void onMsg(int res) {
Toast.makeText(MainActivity.this, "res="+getString(res), Toast.LENGTH_SHORT).show();
}
/**
* 分享回调
*/
PlatformActionListener shareListener = new PlatformActionListener() {
@Override
public void onError(final Platform plat, final int action, final Throwable t) {
Log.e("log", t.getMessage());
handler.post(new Runnable() {
@Override
public void run() {
threadListener.onError(plat, action, t);
}
});
}
@Override
public void onComplete(final Platform plat, final int action, final HashMap<String, Object> res) {
handler.post(new Runnable() {
@Override
public void run() {
threadListener.onComplete(plat, action, res);
}
});
}
@Override
public void onCancel(final Platform plat, final int action) {
Log.e("log", "取消分享");
handler.post(new Runnable() {
@Override
public void run() {
threadListener.onCancel(plat, action);
}
});
}
};
}
ShareThreadListener.java
package com.czhappy.kuaizhi;
import java.util.HashMap;
import cn.sharesdk.framework.Platform;
/**
* 分享线程穿透监听器
* @author Administrator
*
*/
public interface ShareThreadListener {
//失败
public void onError(Platform plat, int action, Throwable t);
//完成
public void onComplete(Platform plat, int action, HashMap<String, Object> res);
//取消
public void onCancel(Platform plat, int action);
//消息
public void onMsg(int res);
}
四、注意事项
1、项目中使用的jar包
2、需要添加与微信类似的YXEntryActivity
3、assets目录下添加ShareSDK.xml配置文件