您的位置:首页 > 移动开发 > 微信开发

andriod 实现新浪、QQ空间、微信朋友圈、微信好友分享功能

2014-06-12 13:28 721 查看
前言:自己在学习的过程中的一些操作过程,对分享的一些理解。下面就讲解一下:

下载地址:http://download.csdn.net/detail/u014608640/7490357

首先,我们需要去ShareSdk官方网站http://sharesdk.cn/ 去下载ShareSDK ,然后我们会有4个文件:



根据我自己在学习的过程中只用到了第一个文件夹的


libs目录的2个项目,这2个是必须要的,是ShareSdk提供的,然后需要将这2个放入到自己做的项目当中去,在Res目录下有一个

ShareSdk.xml文件 这个很重要的,大概意思就是:提供各个客户端能否分享,将这个也要复制到自己做的项目的assets 目录下

第二步,我们需要将第3个文件Sample打开,里面有项目需要用到的一些类,



这个也需要导入到项目中去的,会自动生成一个小项目,注意:不是主程序哦。这个程序中可以进行测试的,秘钥是123456

第三步:配置AndroidManifest.xml

<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>


其他配置:

<!-- Share SDK START -->
<activity
android:name="cn.sharesdk.framework.ShareSDKUIShell"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:windowSoftInputMode="stateHidden|adjustResize" >

<!--
AuthorizeAdapter表示一个继承自cn.sharesdk.framework.authorize.AuthorizeAdapter
的类,这个类可以监听到页面的生命周期,也可以获取授权页面的各种UI控件。
开发者可以通过继承AuthorizeAdapter,重写其方法,并获取各种UI来自定义这个页面的行为。
-->
<meta-data
android:name="AuthorizeAdapter"
android:value="cn.sharesdk.demo.MyAdapter" />

<!--
QZoneWebShareAdapter表示一个继承自cn.sharesdk.tencent.qzone.QZoneWebShareAdapter
的类,这个类可以监听到页面的生命周期,也可以获QQ空间网页分享权页面的各种UI控件。
开发者可以通过继承QZoneWebShareAdapter,重写其方法,并获取各种UI来自定义这个页面的行为。
-->
<meta-data
android:name="QZoneWebShareAdapter"
android:value="cn.sharesdk.demo.MyQZoneWebShareAdapter" />

<!--
Dropbox的SSO功能需要在此处添加一个对ACTION_VIEW事件的过滤器,其中的scheme是
“db-”前缀再开发者应用的加上appKey。如果此过滤器不设置,则不能完成SSO功能授权
-->
<intent-filter>
<data android:scheme="db-7janx53ilz11gbs" />

<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>

<!--
如果集成QQ分享,或者使用QQ客户端来进行QQ空间的分享,须要在此处添加一个对ACTION_VIEW
事件的过滤器,其中的scheme是“tencent”前缀再开发者应用的加上appId。如果此过滤器不设置,
则分享结束以后不能得到正确的回调
-->
<intent-filter>
<data android:scheme="tencent100371282" />

<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>
<!-- 微信分享回调 -->
<activity
android:name="cn.sharesdk.demo.wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />

<!-- Share SDK FINISH -->


配置完之后,就给大家说一下添加分享代码

在您的代码中调用此方法,即可打开一键分享功能进行分享

列入一个按钮:

ShareSDKUtil shareSDKUtil = new ShareSDKUtil(this);
shareSDKUtil.setPage(getWindow().getDecorView());
shareSDKUtil.showShare(false, null);


核心代码:

public class ShareSDKUtil {

private Context mContext;

private View mView;

public ShareSDKUtil(Context context) {
this.mContext = context;
}

public Context getContext() {
return mContext;
}

/**
* ShareSDK集成方法有两种</br>
* 1、第一种是引用方式,例如引用onekeyshare项目,onekeyshare项目再引用mainlibs库</br>
* 2、第二种是把onekeyshare和mainlibs集成到项目中,本例子就是用第二种方式</br> 请看“ShareSDK
* 使用说明文档”,SDK下载目录中 </br> 或者看网络集成文档
* http://wiki.sharesdk.cn/Android_%E5%BF%AB * %E9%80%9F%E9%9B%86%E6%88%90%E6%8C%87%E5%8D%97
* 3、混淆时,把sample或者本例子的混淆代码copy过去,在proguard-project.txt文件中
*
*
* 平台配置信息有三种方式: 1、在我们后台配置各个微博平台的key
* 2、在代码中配置各个微博平台的key,http://sharesdk.cn/androidDoc
* /cn/sharesdk/framework/ShareSDK.html
* 3、在配置文件中配置,本例子里面的assets/ShareSDK.conf,
*/
public void showShare(boolean silent, String platform) {
final OnekeyShare oks = new OnekeyShare();
oks.setNotification(R.drawable.app_icon, getContext().getString(R.string.app_name));
oks.setAddress("12345678901");
oks.setTitle(getContext().getString(R.string.app_name));
oks.setTitleUrl("http://www.xx.com");
oks.setText("555555555555555555");

//		oks.setImagePath(Environment.getExternalStorageDirectory().getAbsolutePath()+"/AndyDemo/ScreenImage/Screen_1.png");  //weixin
//		 oks.setImageUrl("http://f1.sharesdk.cn/imgs/2014/02/26/owWpLZo_638x960.jpg");//MainActivity.TEST_IMAGE_URL
oks.setImageUrl("/sdcard/AndyDemo/ScreenImage/Screen_1.png");
// 不能为空,否则微信分享类型为文本
oks.setUrl("http://www.xx.com");// WeiXin
// oks.setFilePath(MainActivity.TEST_IMAGE);//WeiXin
// oks.setComment(getContext().getString(R.string.share));// QZone
oks.setSite(getContext().getString(R.string.app_name));// QZone
oks.setSiteUrl("http://www.xx.com");// QZone
// oks.setVenueName("ShareSDK");
// oks.setVenueDescription("This is a beautiful place!");
// oks.setLatitude(23.056081f);
// oks.setLongitude(113.385708f);
oks.setSilent(silent);
if (platform != null) {
oks.setPlatform(platform);
}

// 取消注释,可以实现对具体的View进行截屏分享
// Add by yinghui.hong 取消注释的同时需要将setImagePath注释,见{@link ShareCore share}
//		oks.setViewToShare(getPage());
oks.setViewToShare((Activity)getContext());
// 去除注释,可令编辑页面显示为Dialog模式
// oks.setDialogMode();

// 去除注释,在自动授权时可以禁用SSO方式
// oks.disableSSOWhenAuthorize();

// 去除注释,则快捷分享的操作结果将通过OneKeyShareCallback回调
// oks.setCallback(new OneKeyShareCallback());
// oks.setShareContentCustomizeCallback(new
// ShareContentCustomizeDemo());

// 去除注释,演示在九宫格设置自定义的图标
// Bitmap logo = BitmapFactory.decodeResource(menu.getResources(),
// R.drawable.ic_launcher);
// String label = menu.getResources().getString(R.string.app_name);
// OnClickListener listener = new OnClickListener() {
// public void onClick(View v) {
// String text = "Customer Logo -- ShareSDK " +
// ShareSDK.getSDKVersionName();
// Toast.makeText(menu.getContext(), text, Toast.LENGTH_SHORT).show();
// oks.finish();
// }
// };
// oks.setCustomerLogo(logo, label, listener);

// 去除注释,则快捷分享九宫格中将隐藏新浪微博和腾讯微博
// oks.addHiddenPlatform(SinaWeibo.NAME);
// oks.addHiddenPlatform(TencentWeibo.NAME);

oks.show(getContext());
}

public void setPage(View view) {
this.mView = view;
}

protected View getPage() {
return mView;
}


我自己在做的过程中遇到的问题也说一下: 做这些功能分为2种,一种是需要审核的,我做的就是第一种,第2种是不需要审核的,这个大家可以去看下API,

像新浪和微信.QQ空间必须要审核才可以分享的,审核的时间有点长,在微信审核的时候那个应用签名一定要注意了,不能填错哦,否则就算审核成功了,也无法

分享的哦!

QQ空间是支持网络图片,我做的时候本地图片会显示不出来,查了下原因,是因为QQ空间没提过这个功能,所以只能分享文字!



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: