小弟第一次写博客,有什么对不住的就请多原谅!
废话不多说,先上图:
其实呢,这个DEMO是比较简单的,下面一步一步教大家:
项目结构:
1.布局(布局很简单啦,就一个Button)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<Button
android:id="@+id/button1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="一键分享"/>
</RelativeLayout>
2.既然咱们是要用ShareSDK来实现图文分享,那么就要先去他的官网下载所需要的SDK (SDK下载),你可以勾选你所需要的分享平台(比如微信,新浪...)
(PS:你还可以取下载官网的DEMO的看看,也不错)
平台lib : ..\ShareSDK for Android\Libs\MainLibs\libs 框架lib:...\ShareSDK for Android\Libs\OneKeyShare\libs
图标:.......\ShareSDK for Android\Libs\OneKeyShare\res\drawable-xhdpi
XML: ...\ShareSDK for Android\Res\ShareSDK.xml (这个放在assets)
3.ShareSDK.xml
主要是要到ShareSDK 官网去注册一个AppKey
修改里面的一些值,你下载的ShareSDK.xml 有详细的注释,这里就不多说了
4.Copy 你下载目录中的 ....\ShareSDK for Android\Libs\OneKeyShare\src\cn\sharesdk\onekeyshare 这个包
(这是官方做的相当于一个框架吧)
5.重点来了 主要是写一个onkey(String platform) 这个方法
下面是代码,都有详细的注释:
package com.example.sharesdk_onkeysharedemo;
import java.io.File;
import java.io.InputStream;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.onekeyshare.OnekeyShare;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button=(Button)findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
try {
onkey(null);
} catch (Exception e) {
// TODO Auto-generated catch block
Toast.makeText(getApplicationContext(), "请检查您的程序是否安装", 0).show();
}
}
});
}
private void onkey(String platform) {
// TODO Auto-generated method stub
ShareSDK.initSDK(this); //初始化 (必须)
OnekeyShare oks = new OnekeyShare();
//关闭sso授权
oks.disableSSOWhenAuthorize();
// title标题,印象笔记、邮箱、信息、微信、人人网和QQ空间使用
oks.setTitle("标题");
// titleUrl是标题的网络链接,仅在人人网和QQ空间使用
oks.setTitleUrl("www.baidu.com");
// text是分享文本,所有平台都需要这个字段
oks.setText("文本内容");
// imagePath是图片的本地路径,Linked-In以外的平台都支持此参数
// oks.setImagePath("/sdcard/test.jpg");
//costume.getLargepic()
// InputStream abpath = getClass().getResourceAsStream("/assets/girl.jpg");
//String path ="file:///android_asset/girl.jpg"; //以name存在目录中
//分享的图片 (这里是网络图片的地址)
String path ="http://f.hiphotos.baidu.com/image/pic/item/b219ebc4b74543a977adc9d01d178a82b9011473.jpg";
oks.setImageUrl(path);//新浪目前没有通过审核没有申请高级权限,在新浪上会分享失败,应用通过审核后去申请高级权限就可以设置图片了[设置imageurl需要在开放平台申请高级权限]
//url在微信(包括好友、朋友圈收藏)和易信(包括好友和朋友圈)中使用,否则可以不提供
oks.setUrl("www.baidu.com");
//filePath是待分享应用程序的本地路劲,仅在微信(易信)好友和Dropbox中使用,否则可以不提供
oks.setFilePath(path);
//comment是我对这条分享的评论,仅在人人网和QQ空间使用,否则可以不提供
oks.setComment(path);
//site是分享此内容的网站名称,仅在QQ空间使用,否则可以不提供
oks.setSite("网站名称");
//siteUrl是分享此内容的网站地址,仅在QQ空间使用,否则可以不提供
oks.setSiteUrl("www.baidu.com");
//foursquare分享时的地方名
oks.setVenueName("ShareSDK");
//foursquare分享时的地方描述
oks.setVenueDescription("This is a beautiful place!");
//分享地纬度,经度,新浪微博、腾讯微博和foursquare支持此字段
oks.setLatitude(23.056081f);
oks.setLongitude(113.385708f);
//是否直接分享
oks.setSilent(false);
//设置编辑页的初始化选中平台
if (platform != null) {
oks.setPlatform(platform);
}
// 去除注释,可令编辑页面显示为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(MainActivity.this);
}
/**
* 快捷分享项目现在添加为不同的平台添加不同分享内容的方法。
*本类用于演示如何区别Twitter的分享内容和其他平台分享内容。
*/
/*class ShareContentCustomizeDemo implements ShareContentCustomizeCallback {
public void onShare(Platform platform, ShareParams paramsToShare) {
// 改写twitter分享内容中的text字段,否则会超长,
// 因为twitter会将图片地址当作文本的一部分去计算长度
if (Twitter.NAME.equals(platform.getName())) {
String text = platform.getContext().getString("看不");
paramsToShare.setText(text);
}
}
}*/
//然后:在后面加上斜杠,在加上文件名
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
ShareSDK.stopSDK(this);//记住要结束
}
}
6.记住把VALUES 里面的文件放进去 (官网DEMO有,我的项目也有)
7.最后别忘了 AndroidManifest.xml 文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sharesdk_onkeysharedemo"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<!--权限 -->
<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" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.sharesdk_onkeysharedemo.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="cn.sharesdk.framework.ShareSDKUIShell"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:windowSoftInputMode="stateHidden|adjustResize" >
<intent-filter>
<data android:scheme="tencent100371282" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<!-- 微信分享回调 -->
<activity
android:name="cn.sharesdk.demo.wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<!-- 易信分享回调 -->
<activity
android:name="cn.sharesdk.demo.yxapi.YXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
</application>
</manifest>
8.(不要微信和易信分享回调的朋友可以忽略)
如果不要的话,上面那2个Activity可以不注册, 需要回调的话 那么就要在onkey(String platform) 里面去掉注释
// 去除注释,则快捷分享的操作结果将通过OneKeyShareCallback回调
// oks.setCallback(new OneKeyShareCallback());
package cn.net.brisc.wuhan.museum.ui;
import java.io.UnsupportedEncodingException;
import cn.net.brisc.wuhan.museum.Conf;
import cn.net.brisc.wuhan.museum.R;
import cn.net.brisc.wuhan.uitl.CutString;
import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.Platform.ShareParams;
import cn.sharesdk.onekeyshare.ShareContentCustomizeCallback;
import cn.sharesdk.wechat.favorite.WechatFavorite;
import cn.sharesdk.wechat.moments.WechatMoments;
public class ShareContentCustomizeDemo implements ShareContentCustomizeCallback {
@Override
public void onShare(Platform platform, ShareParams paramsToShare) {
// TODO Auto-generated method stub
if ("SinaWeibo".equals(platform.getName())) {
//String text = platform.getContext().getString(R.string.share_content_short);
//String st = new String(CutString.sinaweiboString.getBytes("gbk"),"UTF-8");
paramsToShare.setText(CutString.sinaweiboString+"..."+"博物馆下载链接:http://chn.bluenion.com/tess/ips.php?dl=wuhanmuseum");
System.out.println(CutString.sinaweiboString+"博物馆下载链接:http://chn.bluenion.com/tess/ips.php?dl=wuhanmuseum");
}/*else if("Wechat".equals(platform.getName())){
//paramsToShare.setText(CutString.Wechat+"..."+"博物馆下载链接:http://chn.bluenion.com/tess/ips.php?dl=wuhanmuseum");
//paramsToShare.setImageUrl("http://f1.sharesdk.cn/imgs/2014/02/26/owWpLZo_638x960.jpg");
paramsToShare.setText(CutString.Wechat+"博物馆下载链接:http://chn.bluenion.com/tess/ips.php?dl=wuhanmuseum");
paramsToShare.setTitle(CutString.title);
paramsToShare.setImagePath(Conf.SDCARD+CutString.imageid+".jpg");
System.out.println("微信分享内容 "+CutString.title+"++++"+Conf.SDCARD+CutString.imageid+".jpg");
}else if("WechatFavorite".equals(platform.getName()) ||"WechatMoments".equals(platform.getName()) ){
//paramsToShare.setText(CutString.Wechat+"..."+"博物馆下载链接:http://chn.bluenion.com/tess/ips.php?dl=wuhanmuseum");
//paramsToShare.setImageUrl("http://f1.sharesdk.cn/imgs/2014/02/26/owWpLZo_638x960.jpg");
paramsToShare.setText(CutString.Wechat+"博物馆下载链接:http://chn.bluenion.com/tess/ips.php?dl=wuhanmuseum");
paramsToShare.setTitle(CutString.title);
paramsToShare.setShareType(platform.SHARE_IMAGE);
paramsToShare.setImagePath(Conf.SDCARD+CutString.imageid+"");
System.out.println("朋友圈 "+CutString.title+"++++"+Conf.SDCARD+CutString.imageid+".jpg");
}*/
}
}