ShareSDK介绍
进入官网学习:
http://www.mob.com
根据向导添加app
快速继承SDK,并下载解压:
双击运行QuickIntegrater.jar
生成wisdombj文件夹,并将其拷入我们的项目中去。
将生产的wisdombj中的文件移植到我们的工程中,文件目录如下:
最好在重启下AndroidStudio,让我构建的代码在Gradle文件中生效。
然后根据官网教程:
http://dashboard.mob.com/#/main/quickstarts/share/android
在我们的工程中设置代码:
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xbmu.wisdombj">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_TASKS" />
<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="@mipmap/icon_150"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".SplashActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".GuideActivity"
android:label="@string/title_activity_guide"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main"
android:theme="@style/Theme.PageIndicatorDefaults" />
<activity
android:name=".NewsDetailActivity"
android:label="@string/title_activity_news_detail"
android:theme="@style/AppTheme.NoActionBar"></activity>
<!--Shared SDK-->
<activity
android:name="com.mob.tools.MobUIShell"
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=".wxapi.WXEntryActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait" />
</application>
</manifest>
NewsDetailActivity.java
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn_back:
finish();
break;
case R.id.btn_size:
showChooseDialog();
break;
case R.id.btn_share:
showShare();
break;
}
}
/**
* 分享, 注意在sdcard根目录放test.jpg
*/
private void showShare1() {
ShareSDK.initSDK(this);
OnekeyShare oks = new OnekeyShare();
oks.setTheme(OnekeyShareTheme.SKYBLUE);//设置天蓝色的主题
// 关闭sso授权
oks.disableSSOWhenAuthorize();
// 分享时Notification的图标和文字
oks.setNotification(R.drawable.mm,
getString(R.string.app_name));
// title标题,印象笔记、邮箱、信息、微信、人人网和QQ空间使用
oks.setTitle(getString(R.string.share));
// titleUrl是标题的网络链接,仅在人人网和QQ空间使用
oks.setTitleUrl("http://sharesdk.cn");
// text是分享文本,所有平台都需要这个字段
oks.setText("我是分享文本");
// imagePath是图片的本地路径,Linked-In以外的平台都支持此参数
oks.setImagePath("/sdcard/test.jpg");// 确保SDcard下面存在此张图片
// url仅在微信(包括好友和朋友圈)中使用
oks.setUrl("http://sharesdk.cn");
// comment是我对这条分享的评论,仅在人人网和QQ空间使用
oks.setComment("我是测试评论文本");
// site是分享此内容的网站名称,仅在QQ空间使用
oks.setSite(getString(R.string.app_name));
// siteUrl是分享此内容的网站地址,仅在QQ空间使用
oks.setSiteUrl("http://sharesdk.cn");
// 启动分享GUI
oks.show(this);
}
/**
* 分享, 注意在sdcard根目录放test.jpg
*/
private void showShare(){
ShareSDK.initSDK(this);
OnekeyShare oks = new OnekeyShare();
oks.setTheme(OnekeyShareTheme.SKYBLUE);//设置主题样式为天空蓝
// 分享时Notification的图标和文字
oks.setNotification(R.drawable.mm, getString(R.string.app_name));
oks.setText("我是分享文本");
oks.setImageUrl("http://f1.sharesdk.cn/imgs/2014/05/21/oESpJ78_533x800.jpg");
// 启动分享GUI
oks.show(this);
}
运行效果:
代码没有问题,可以实现的。只不过我使用的是genymotion模拟器,没有进行联网设置(我尝试了好多种联网设置多没有用,希望那路大神知道,提供下方法)。
缓存介绍
CacheUtils.java
package com.xbmu.wisdombj.utils;
import android.content.Context;
/**
* 缓存工具类
* Created by Administrator on 2016/2/12 0012.
*/
public class CacheUtils {
/**
* 设置缓存 key是url,value是json
* @param ctx
* @param key
* @param value
*/
public static void setCache(Context ctx,String key,String value){
SharePreferenceUtils.getString(ctx,key,value);
//可以将缓存放在文件中,文件名是MD5(url),文件内容是json
}
/**
* 获取缓存key是url
* @param ctx
* @param key
* @return
*/
public static String getCache(Context ctx,String key){
return SharePreferenceUtils.getString(ctx,key,null);
}
}
TabDetailPager.java
@Override
public void initData() {
super.initData();
String cache = CacheUtils.getCache(mActivity,mUrl);
if(!TextUtils.isEmpty(cache)){
paserData(cache,false);
}
getDataFromServer();
}
/**
* 从服务器获取数据
*/
public void getDataFromServer() {
HttpUtils httpUtils = new HttpUtils();
httpUtils.send(HttpMethod.GET, mUrl, new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
String result = responseInfo.result;
System.out.print("从网络获取的子页签详情数据:" + result);
//解析数据
paserData(result, false);
//接口访问完后(请求完数据后),收起下拉刷新控件
lvTabList.onRefreshComplete(true);
//设置缓存
CacheUtils.setCache(mActivity,mUrl,result);
}
@Override
public void onFailure(HttpException e, String msg) {
Toast.makeText(mActivity, msg, Toast.LENGTH_SHORT).show();
e.printStackTrace();
//接口访问完后(请求完数据后),收起下拉刷新控件
lvTabList.onRefreshComplete(false);
}
});
}
自动轮播条(头条新闻自动轮播)
TabDetailPager.java
/**
* 解析数据
*
* @param result
*/
private void paserData(String result, boolean isMore) {
Gson gson = new Gson();
tabData = gson.fromJson(result, TabData.class);
//处理下一页链接
String more = tabData.data.more;
if (!TextUtils.isEmpty(more)) {
mMoreUrl = GlobalVariables.BASE_URL + more;
} else {
mMoreUrl = null;
}
if (!isMore) {
topNewsDatas = tabData.data.topnews;
tabNewsDatas = tabData.data.news;
if (topNewsDatas != null) {
vpTabPagerTop.setAdapter(new NewsTopAdapter());
indicator.setOnPageChangeListener(this);
indicator.setSnap(true);//支持快照显示
indicator.onPageSelected(0);//让指示器重新定位到第一个点
indicator.setViewPager(vpTabPagerTop);
tvNewsTitle.setText(topNewsDatas.get(0).title);
}
if (tabNewsDatas != null) {
newsItemAdapter = new NewsItemAdapter();
lvTabList.setAdapter(newsItemAdapter);
}
//自动轮播显示
if(mHandler == null){
mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
int currentItem = vpTabPagerTop.getCurrentItem();
if(currentItem < topNewsDatas.size() - 1){
currentItem ++;
}else{
currentItem = 0;
}
vpTabPagerTop.setCurrentItem(currentItem);//切换到下一个页面
mHandler.sendEmptyMessageDelayed(0,3000);//延迟3秒后发消息,形成循环
}
};
mHandler.sendEmptyMessageDelayed(0,3000);//延迟3秒后发消息
}
} else {
//如果是加载下一页,需要将数据追加给原来的集合
ArrayList<TabNewsData> news = tabData.data.news;
tabNewsDatas.addAll(news);
newsItemAdapter.notifyDataSetChanged();
}
}
运行效果:
轮播条触摸监听
TabDetailPager.java
/**
* 新闻头条适配器
*/
private class NewsTopAdapter extends PagerAdapter {
private BitmapUtils bitmapUtils;
public NewsTopAdapter() {
bitmapUtils = new BitmapUtils(mActivity);
bitmapUtils.configDefaultLoadingImage(R.drawable.topnews_item_default);//设置默认图片
}
@Override
public int getCount() {
return topNewsDatas.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView imageView = new ImageView(mActivity);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);//基于控件大小填充图片
topNewsData = topNewsDatas.get(position);
bitmapUtils.display(imageView, topNewsData.topimage);//传递imageView对象和图片地址
container.addView(imageView);
imageView.setOnTouchListener(new TopNewsTouchListener());//设置触摸监听
System.out.println("topNews:" + position);
return imageView;
}
class TopNewsTouchListener implements View.OnTouchListener{
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
System.out.println("按下");
mHandler.removeCallbacksAndMessages(null);//删除handler中的所有消息
break;
case MotionEvent.ACTION_CANCEL:
System.out.println("事件取消");
mHandler.sendEmptyMessageDelayed(0, 3000);
break;
case MotionEvent.ACTION_UP:
System.out.println("抬起");
mHandler.sendEmptyMessageDelayed(0,3000);
break;
default:
break;
}
return true;
}
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
运行效果:
全部代码:
http://download.csdn.net/detail/btt2013/9430266