博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android进阶之使用第三方平台ShareSDK实现新浪微博的一键分享功能
阅读量:6035 次
发布时间:2019-06-20

本文共 6982 字,大约阅读时间需要 23 分钟。

hot3.png

在公司最近的一个项目中,需要实现一键分享功能,在这里我使用的是第三方平台ShareSDK,将使用经验与大家分享

先看效果图

主界面

\

分享界面

\

由于第一次使用,所以需要先进行新浪授权,授权界面

\

分享结果图片

\

下面开始介绍如何使用ShareSDK实现微博的分享功能(其他平台的类似)

首先看一下项目的结构图

\

shareSDK传送门

在使用shareSDK之前,我们需要先到新浪微博的开放平台进行注册,获得appkey以及其他的信息

新浪微博开放平台传送门

下面图片中划掉的部分是要重点关注的

\

特别需要注意的是,下面的回调网址必须填写,而且在代码中有涉及,使用默认的即可

\

至此,开发之前的准备工作已经做好了,下面还是贴代码

首先看一下布局文件代码,很简单,只有一个按钮

06. 07.
12. 13.

MainActivity.java

package com.heli17.weiboonekeylogin;002. 003.import java.io.File;004.import java.io.FileOutputStream;005.import java.util.HashMap;006. 007.import android.app.Activity;008.import android.app.Notification;009.import android.app.NotificationManager;010.import android.app.PendingIntent;011.import android.content.Context;012.import android.content.Intent;013.import android.graphics.Bitmap;014.import android.graphics.Bitmap.CompressFormat;015.import android.graphics.BitmapFactory;016.import android.os.Bundle;017.import android.os.Environment;018.import android.os.Handler.Callback;019.import android.os.Message;020.import android.view.View;021.import android.widget.Toast;022.import cn.sharesdk.framework.Platform;023.import cn.sharesdk.framework.PlatformActionListener;024.import cn.sharesdk.framework.ShareSDK;025.import cn.sharesdk.framework.utils.UIHandler;026.import cn.sharesdk.onekeyshare.OnekeyShare;027. 028.public class MainActivity extends Activity implements PlatformActionListener,029.Callback {030. 031.private static final int MSG_TOAST = 1;032.private static final int MSG_ACTION_CCALLBACK = 2;033.private static final int MSG_CANCEL_NOTIFY = 3;034. 035.// sdcard中的图片名称036.private static final String FILE_NAME = "/share_pic.jpg";037.public static String TEST_IMAGE;038. 039.@Override040.public boolean handleMessage(Message msg) {041.switch (msg.what) {042.case MSG_TOAST: {043.String text = String.valueOf(msg.obj);044.Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT).show();045.}046.break;047.case MSG_ACTION_CCALLBACK: {048.switch (msg.arg1) {049.case 1: // 成功后发送Notification050.showNotification(2000, "分享完成");051.break;052.case 2: // 失败后发送Notification053.showNotification(2000, "分享失败");054.break;055.case 3: // 取消056.showNotification(2000, "取消分享");057.break;058.}059.}060.break;061.case MSG_CANCEL_NOTIFY:062.NotificationManager nm = (NotificationManager) msg.obj;063.if (nm != null) {064.nm.cancel(msg.arg1);065.}066.break;067.}068.return false;069.}070. 071.@Override072.protected void onCreate(Bundle savedInstanceState) {073.super.onCreate(savedInstanceState);074.setContentView(R.layout.activity_main);075.// 初始化ShareSDK076.ShareSDK.initSDK(this);077.// 初始化图片路径078.new Thread() {079.public void run() {080.initImagePath();081.}082.}.start();083.}084. 085.//一键分享的点击事件086.public void click(View v) {087.//实例化一个OnekeyShare对象088.OnekeyShare oks = new OnekeyShare();089.//设置Notification的显示图标和显示文字090.oks.setNotification(R.drawable.ic_launcher, "ShareSDK demo");091.//设置短信地址或者是邮箱地址,如果没有可以不设置092.oks.setAddress("12345678901");093.//分享内容的标题094.oks.setTitle("分享内容的标题");095.//标题对应的网址,如果没有可以不设置096.oks.setTitleUrl("http://www.17heli.com");097.//设置分享的文本内容098.oks.setText("分享的文本内容");099.//设置分享照片的本地路径,如果没有可以不设置100.oks.setImagePath(MainActivity.TEST_IMAGE);101.//设置分享照片的url地址,如果没有可以不设置102.oks.setImageUrl("http://img.appgo.cn/imgs/sharesdk/content/2013/07/25/1374723172663.jpg");103.//微信和易信的分享的网络连接,如果没有可以不设置104.oks.setUrl("http://sharesdk.cn");105.//人人平台特有的评论字段,如果没有可以不设置106.oks.setComment("comment");107.//程序的名称或者是站点名称108.oks.setSite("site");109.//程序的名称或者是站点名称的链接地址110.oks.setSiteUrl("http://www.baidu.com");111.//设置纬度112.oks.setLatitude(23.122619f);113.//设置精度114.oks.setLongitude(113.372338f);115.//设置是否是直接分享116.oks.setSilent(false);117.//显示118.oks.show(MainActivity.this);119.}120. 121.private void initImagePath() {122.try {123.if (Environment.MEDIA_MOUNTED.equals(Environment124..getExternalStorageState())125.&& Environment.getExternalStorageDirectory().exists()) {126.TEST_IMAGE = Environment.getExternalStorageDirectory()127..getAbsolutePath() + FILE_NAME;128.} else {129.TEST_IMAGE = getApplication().getFilesDir().getAbsolutePath()130.+ FILE_NAME;131.}132.// 创建图片文件夹133.File file = new File(TEST_IMAGE);134.if (!file.exists()) {135.file.createNewFile();136.Bitmap pic = BitmapFactory.decodeResource(getResources(),137.R.drawable.pic);138.FileOutputStream fos = new FileOutputStream(file);139.pic.compress(CompressFormat.JPEG, 100, fos);140.fos.flush();141.fos.close();142.}143.} catch (Throwable t) {144.t.printStackTrace();145.TEST_IMAGE = null;146.}147.}148. 149.@Override150.protected void onDestroy() {151.super.onDestroy();152.// 在Activity中停止ShareSDK153.ShareSDK.stopSDK(this);154.}155. 156.// 取消后的回调方法157.@Override158.public void onCancel(Platform platform, int action) {159.Message msg = new Message();160.msg.what = MSG_ACTION_CCALLBACK;161.msg.arg1 = 3;162.msg.arg2 = action;163.msg.obj = platform;164.UIHandler.sendMessage(msg, this);165.}166. 167.// 完成后的回调方法168.@Override169.public void onComplete(Platform platform, int action,170.HashMap
 arg2) {171.Message msg = new Message();172.msg.what = MSG_ACTION_CCALLBACK;173.msg.arg1 = 1;174.msg.arg2 = action;175.msg.obj = platform;176.UIHandler.sendMessage(msg, this);177.}178. 179.// 出错后的回调方法180.@Override181.public void onError(Platform platform, int action, Throwable t) {182.t.printStackTrace();183.Message msg = new Message();184.msg.what = MSG_ACTION_CCALLBACK;185.msg.arg1 = 2;186.msg.arg2 = action;187.msg.obj = t;188.UIHandler.sendMessage(msg, this);189.}190. 191.// 根据传入的参数显示一个Notification192.@SuppressWarnings("deprecation")193.private void showNotification(long cancelTime, String text) {194.try {195.Context app = getApplicationContext();196.NotificationManager nm = (NotificationManager) app197..getSystemService(Context.NOTIFICATION_SERVICE);198.final int id = Integer.MAX_VALUE / 13 + 1;199.nm.cancel(id);200.long when = System.currentTimeMillis();201.Notification notification = new Notification(202.R.drawable.ic_launcher, text, when);203.PendingIntent pi = PendingIntent.getActivity(app, 0, new Intent(),204.0);205.notification.setLatestEventInfo(app, "sharesdk test", text, pi);206.notification.flags = Notification.FLAG_AUTO_CANCEL;207.nm.notify(id, notification);208. 209.if (cancelTime > 0) {210.Message msg = new Message();211.msg.what = MSG_CANCEL_NOTIFY;212.msg.obj = nm;213.msg.arg1 = id;214.UIHandler.sendMessageDelayed(msg, cancelTime, this);215.}216.} catch (Exception e) {217.e.printStackTrace();218.}219.}220. 221.}

ShareSDK.xml

02.
03. 04.
50. 51.
 
52. 53.
60. 61.

清单文件Mainfest.xml

02.
06. 07.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20. 21.
25.
29.
30.
31. 32.
33.
34.35.
36.
42.
45. 46.
47.
48. 49.
50. 51.
52.
53.
54.55.56. 57.

 

转载于:https://my.oschina.net/u/1036767/blog/262408

你可能感兴趣的文章
Anaconda jupyter notebook 出现 kernel error 解决办法
查看>>
我对读计算机软件专业硕士的几点看法
查看>>
用JS写CSS
查看>>
TOJ4537: n阶行列式
查看>>
算法刷题笔记-stack-四则运算
查看>>
3.16
查看>>
Linux下arp用法
查看>>
表单文件上传与文件下载
查看>>
jquery 中prop()的使用方法
查看>>
下午考
查看>>
WKWebView
查看>>
创建字符设备的三种方法
查看>>
走在网页游戏开发的路上(六)
查看>>
nginx 配置的server_name参数(转)
查看>>
Uva592 Island of Logic
查看>>
C++基础代码--20余种数据结构和算法的实现
查看>>
footer固定在页面底部的实现方法总结
查看>>
nginx上传文件大小
查看>>
数字通信原理笔记(一)---概述
查看>>
HDU 2243 考研路茫茫——单词情结(自动机)
查看>>