Android 5分鐘實現ShareSDK分享各平臺
效果圖
一 首先,到官網下載shareSDK的jar包,我demo裡的是3.1.2版本
http://www.mob.com/downloadDetail/ShareSDK/android
然後將你需要分享的平臺的jar包匯入lib
二 在你的根目錄下(就是包名目錄),new一個package叫wxapi,然後把你下載好的sdk裡的WXEntryActivity扔進去
三 在你的 AndroidManifest.xml中application下,新增如下程式碼
許可權:
<!-- 新增必要的許可權 -->
<uses-permission android:name ="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<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.RECEIVE_SMS" />
<!--ShareSDK相關start-->
<activity
android:name="com.mob.tools.MobUIShell"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="stateHidden|adjustResize" >
<!-- 呼叫新浪原生SDK,需要註冊的回撥activity -->
<intent-filter>
<action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<!--整合line客戶端登入授權,需要添如下格式的過濾器-->
<intent-filter>
<data android:scheme="line.1477692153" />
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<!-- 填寫您從Mob開發者後臺中得到的Appkey和AppSecret -->
<meta-data android:name="Mob-AppKey" android:value="你的Appkey"/>
<meta-data android:name="Mob-AppSecret" android:value="你的AppSecret"/>
<activity
android:name="cn.sharesdk.tencent.qq.ReceiveActivity"
android:launchMode="singleTask"
android:noHistory="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="tencent100371282" />
<!--tencent+你的在騰訊申請的AppId,不改的話分享可以成功但是回撥一直是onCancel哦-->
</intent-filter>
</activity>
<activity
android:name="com.kid.share.wxapi.WXEntryActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait" />
<!--ShareSDK相關end-->
注意了!!!
記得把tencent100371282後面的數字改成你自己註冊的騰訊平臺的AppId
還有Mob-AppKey和Mob-AppSecret的value改為你在ShareSDK註冊應用的的AppID和Appkey。
四 在app/src/main下的assets(沒有這個包就建立),把SDK裡的ShareSDK.xml複製進去,並修改對應平臺的AppKey,AppSecret,AppId引數
至此,我們的sdk環境已經配置好了。接下來就是呼叫了。
先寫一個方便呼叫的工具類
import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.PlatformActionListener;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.sina.weibo.SinaWeibo;
import cn.sharesdk.tencent.qq.QQ;
import cn.sharesdk.tencent.qzone.QZone;
import cn.sharesdk.wechat.friends.Wechat;
import cn.sharesdk.wechat.moments.WechatMoments;
/**
* Created by KID on 2017/12/29.
* 一切AppID和Key請在ShareSDK.xml中配置
* ShareSDK分享工具類
*/
public class ShareUtils {
//QQ好友分享
public static void shareQQ(String title, String shareurl, String text, String imageUrl, PlatformActionListener listener){
Platform qq = ShareSDK.getPlatform(QQ.NAME);
QQ.ShareParams sp = new QQ.ShareParams();
sp.setTitle(title);
sp.setTitleUrl(shareurl); // 標題的超連結
sp.setText(text);
sp.setImageUrl(imageUrl);
qq.setPlatformActionListener(listener);
qq.share(sp);
}
//QQ空間
public static void shareQQzone(String title,String shareurl,String text,String imageUrl,PlatformActionListener listener){
Platform qqZone =ShareSDK.getPlatform(QZone.NAME);
QZone.ShareParams sp = new QZone.ShareParams();
sp.setShareType(Platform.SHARE_IMAGE);
sp.setTitle(title);
sp.setTitleUrl(shareurl); // 標題的超連結
sp.setSiteUrl(shareurl);
sp.setSite("QQ空間標題");
sp.setText(text);
sp.setImageUrl(imageUrl);
qqZone.setPlatformActionListener(listener);
qqZone.share(sp);
}
//新浪微博
public static void shareWeibo(String title,String shareurl,String text,String imageUrl,PlatformActionListener listener){
Platform sina =ShareSDK.getPlatform(SinaWeibo.NAME);
SinaWeibo.ShareParams sp = new SinaWeibo.ShareParams();
sp.setTitle(title);
sp.setTitleUrl(shareurl); // 標題的超連結
sp.setSiteUrl(shareurl);
sp.setText(text);
sp.setImageUrl(imageUrl);
sina.setPlatformActionListener(listener);
sina.share(sp);
}
//微信
public static void shareWechat(String title,String shareurl,String text,String imageUrl,PlatformActionListener listener){
Platform weixin =ShareSDK.getPlatform(Wechat.NAME);
Wechat.ShareParams sp = new Wechat.ShareParams();
sp.setShareType(Platform.SHARE_WEBPAGE);
sp.setTitle(title);
sp.setImageUrl(imageUrl);
sp.setUrl(shareurl);
sp.setText(text);
sp.setSite("QQ空間標題");
// siteUrl是分享此內容的網站地址,僅在QQ空間使用
weixin.setPlatformActionListener(listener);
weixin.share(sp);
}
//微信朋友圈
public static void sharepyq(String title,String shareurl,String text,String imageUrl,PlatformActionListener listener){
Platform weixin =ShareSDK.getPlatform(WechatMoments.NAME);
WechatMoments.ShareParams sp = new WechatMoments.ShareParams();
sp.setShareType(Platform.SHARE_WEBPAGE);
sp.setTitle(title);
sp.setImageUrl(imageUrl);
sp.setUrl(shareurl);
sp.setText(text);
sp.setSite("QQ空間標題");
weixin.setPlatformActionListener(listener);
weixin.share(sp);
}
}
shareSDK對每個平臺分享的程式碼已經封裝的差不多了,基本使用無非是1 獲取分享平臺 2 設定分享引數 3 給分享平臺設定分享引數 4設定分享回撥
注意點:
1,不同平臺的分享引數多多少少會有點不一樣,我這裡只寫了5個平臺供參考。而且引數也只是提取我想要的。比如你如果分享微信的圖片不想用網路圖片了,你還可以setImagePath設定本地圖片也是可以的。或者setImageData直接設定bitmap(這個setImageData在其他平臺用不了)
2,有些平臺沒有的引數,你設定了也不會報錯。比如setSite僅在QQ空間有用,你給其他平臺設定了,也不會報錯。shareSDK裡應該有if不為nul的判斷
接下來只需要在點選事件裡呼叫工具類裡相關程式碼就可以了。
Demo程式碼:
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import java.util.HashMap;
import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.PlatformActionListener;
public class MainActivity extends AppCompatActivity {
ShareDiaog shareDiaog;
//分享標題
private String share_title="百度一下";
//分享連結
private String share_url="http://blog.csdn.net/qq_31390699";
//分享封面圖片
private String share_img="http://img.zcool.cn/community/[email protected]_1l_2o_100sh.jpg";
//分享描述
private String share_desc="不懂你就百度啊";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.share_show).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
shareDiaog = new ShareDiaog(MainActivity.this);
shareDiaog.builder().show();
shareDiaog.setShareClickListener(shareClickListener);
}
});
}
/**
* 各平臺分享按鈕點選事件
*/
private ShareDiaog.ShareClickListener shareClickListener=new ShareDiaog.ShareClickListener() {
@Override
public void shareWechat() {
ShareUtils.shareWechat(share_title,share_url,share_desc,share_img,platformActionListener);
}
@Override
public void sharePyq() {
ShareUtils.sharepyq(share_title,share_url,share_desc,share_img,platformActionListener);
}
@Override
public void shareQQ() {
ShareUtils.shareQQ(share_title,share_url,share_desc,share_img,platformActionListener);
}
@Override
public void shareQzone() {
ShareUtils.shareQQzone(share_title,share_url,share_desc,share_img,platformActionListener);
}
};
/**
* 分享回撥
*/
PlatformActionListener platformActionListener=new PlatformActionListener() {
@Override
public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {
Log.e("kid","分享成功");
}
@Override
public void onError(Platform platform, int i, Throwable throwable) {
Log.e("kid","分享失敗");
}
@Override
public void onCancel(Platform platform, int i) {
Log.e("kid","分享取消");
}
};
}
dialog程式碼
import android.app.AlertDialog;
import android.content.Context;
import android.view.ContextThemeWrapper;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
/**
* Created by KID on 2017/12/29.
*/
public class ShareDiaog implements View.OnClickListener {
private Context context;
private AlertDialog alertDialog;
private LinearLayout ll_share_wechat;
private LinearLayout ll_share_pyq;
private LinearLayout ll_share_qq;
private LinearLayout ll_share_qzone;
private RelativeLayout rl_menu_cancle;
public ShareDiaog(Context context) {
this.context = context;
}
public ShareDiaog builder() {
alertDialog = new AlertDialog.Builder(new ContextThemeWrapper(context, R.style.mycustom_dialog)).create();
alertDialog.show();
Window win = alertDialog.getWindow();
win.setWindowAnimations(R.style.mystyle);
win.getDecorView().setPadding(0, 0, 0, 0);
WindowManager.LayoutParams lp = win.getAttributes();
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
win.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL);
win.setAttributes(lp);
win.setContentView(R.layout.dialog_share);
rl_menu_cancle=win.findViewById(R.id.rl_menu_cancle);
ll_share_wechat=win.findViewById(R.id.ll_share_wechat);
ll_share_pyq=win.findViewById(R.id.ll_share_pyq);
ll_share_qq=win.findViewById(R.id.ll_share_qq);
ll_share_qzone=win.findViewById(R.id.ll_share_qzone);
rl_menu_cancle.setOnClickListener(this);
ll_share_wechat.setOnClickListener(this);
ll_share_pyq.setOnClickListener(this);
ll_share_qq.setOnClickListener(this);
ll_share_qzone.setOnClickListener(this);
return this;
}
public void show(){
alertDialog.show();
}
public void cancle(){
alertDialog.cancel();
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.rl_menu_cancle:
cancle();
break;
case R.id.ll_share_wechat:
cancle();
if(shareClickListener!=null)shareClickListener.shareWechat();
break;
case R.id.ll_share_pyq:
cancle();
if(shareClickListener!=null)shareClickListener.sharePyq();
break;
case R.id.ll_share_qq:
cancle();
if(shareClickListener!=null)shareClickListener.shareQQ();
break;
case R.id.ll_share_qzone:
cancle();
if(shareClickListener!=null)shareClickListener.shareQzone();
break;
}
}
public ShareClickListener shareClickListener;
public interface ShareClickListener{
void shareWechat();
void sharePyq();
void shareQQ();
void shareQzone();
}
public void setShareClickListener(ShareClickListener shareClickListener){
this.shareClickListener=shareClickListener;
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<Button
android:id="@+id/share_show"
android:text="彈出分享框"
android:layout_width="match_parent"
android:layout_height="50dp" />
</LinearLayout>
dialog_share.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/ll_dialog_main_bottom"
android:orientation="vertical"
android:background="@color/white">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/ll_share_wechat"
android:orientation="vertical"
android:layout_weight="1"
android:layout_width="0dp"
android:gravity="center_horizontal"
android:layout_height="match_parent">
<ImageView
android:background="@color/colorAccent"
android:layout_marginTop="16dp"
android:layout_width="50dp"
android:layout_height="50dp" />
<TextView
android:layout_marginTop="11dp"
android:text="微信"
android:textSize="12sp"
android:textColor="@color/text_d"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_share_pyq"
android:orientation="vertical"
android:gravity="center_horizontal"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent">
<ImageView
android:background="@color/colorAccent"
android:layout_marginTop="16dp"
android:layout_width="50dp"
android:layout_height="50dp" />
<TextView
android:layout_marginTop="11dp"
android:text="朋友圈"
android:textSize="12sp"
android:textColor="@color/text_d"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_share_qq"
android:orientation="vertical"
android:gravity="center_horizontal"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent">
<ImageView
android:background="@color/colorAccent"
android:layout_marginTop="16dp"
android:layout_width="50dp"
android:layout_height="50dp" />
<TextView
android:layout_marginTop="11dp"
android:text="QQ"
android:textSize="12sp"
android:textColor="@color/text_d"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_share_qzone"
android:orientation="vertical"
android:gravity="center_horizontal"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent">
<ImageView
android:background="@color/colorAccent"
android:layout_marginTop="16dp"
android:layout_width="50dp"
android:layout_height="50dp" />
<TextView
android:layout_marginTop="11dp"
android:text="空間"
android:textSize="12sp"
android:textColor="@color/text_d"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
<View
android:layout_marginTop="18dp"
android:background="#000000"
android:layout_width="match_parent"
android:layout_height="0.5dp"
/>
<RelativeLayout
android:id="@+id/rl_menu_cancle"
android:layout_width="match_parent"
android:layout_height="48dp">
<TextView
android:textColor="#000000"
android:textSize="18sp"
android:text="取消"
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
</LinearLayout>
是不是不到5分鐘!!!好吧,這時候肯定有些人要吐槽已經過去好久了–!你回頭再想想,純copy-paste4步整合shareSDK配置環境,然後copy一個ShareUtils。是不是都還不到2分鐘。點選事件裡呼叫ShareUtils的share方法,也就一行程式碼吧。至於activity怎麼寫,框怎麼彈,那已經也專案邏輯的事了
程式碼連結http://download.csdn.net/download/qq_31390699/10183498
相關推薦
Android 5分鐘實現ShareSDK分享各平臺
效果圖 一 首先,到官網下載shareSDK的jar包,我demo裡的是3.1.2版本 http://www.mob.com/downloadDetail/ShareSDK/android 然後將你需要分享的平臺的jar包匯入lib 二 在你的根
5分鐘看清楚springcloud各模組的作用及之間的關係
目錄 一、業務場景介紹 二、Spring Cloud核心元件:Eureka 三、Spring Cloud核心元件:Feign 四、Spring Cloud核心元件:Ribbon 五、Spring Cloud核心元件:Hystrix 六、Sp
android 5.0以上so檔案關於平臺支援問題的淺析
背景 近期,因為一些原因,需要整理一個最簡單的外掛框架使用的demo,此過程中出現了一個非常詭異的問題, 在實際專案中一直執行正常的一些外掛,在demo裡面卻執行崩潰,得到的異常資訊如下:06-01 15:44:59.462 26609 26609 E Instrument
Android學習之Android 5.0分享動畫實現微信點選全屏效果
Android5.0過渡動畫,請看 今天用分享動畫實現微信點選全屏效果 本文原始碼下載地址 peizhi 配置 build.gradle: compile 'com.android.support:recyclerview-v7:23.
web 實現5分鐘 鼠標鍵盤無操作,自動退出登陸
function settings 鼠標鍵盤 events <html> <head> <script type="text/javascript"> function ScreenSaver(settings){ this.settings
實現容器的底層技術 - 每天5分鐘玩轉 Docker 容器技術(30)
docker 教程 容器 為了更好地理解容器的特性,本節我們將討論容器的底層實現技術。cgroup 和 namespace 是最重要的兩種技術。cgroup 實現資源限額, namespace 實現資源隔離。cgroupcgroup 全稱 Control Group。Linux 操作系統通過 cg
自己定義ShareSDK分享平臺界面
sso iss rep ram col moment Ltd. override @override 自己定義ShareSDK分享平臺界面 執行效果圖: 微信朋友圈分享成功效果圖: 註:微信朋友圈分享有兩種:一種是為繞過審核,即
overlay 如何實現跨主機通信?- 每天5分鐘玩轉 Docker 容器技術(52)
docker 教程 容器 上一節我們在 host1 中運行了容器 bbox1,今天將詳細討論 overlay 網絡跨主機通信的原理。在 host2 中運行容器 bbox2:bbox2 IP 為 10.0.0.3,可以直接 ping bbox1:可見 overlay 網絡中的容器可以直接通信,同時
如何實現跨 Docker 主機存儲?- 每天5分鐘玩轉 Docker 容器技術(73)
docker 教程 容器 從業務數據的角度看,容器可以分為兩類:無狀態(stateless)容器和有狀態(stateful)容器。無狀態是指容器在運行過程中不需要保存數據,每次訪問的結果不依賴上一次訪問,比如提供靜態頁面的 web 服務器。有狀態是指容器需要保存數據,而且數據會發生變化,訪問的結果
Swarm 如何實現 Failover?- 每天5分鐘玩轉 Docker 容器技術(98)
docker容器教程swarm故障是在所難免的,容器可能崩潰,Docker Host 可能宕機,不過幸運的是,Swarm 已經內置了 failover 策略。創建 service 的時候,我們沒有告訴 swarm 發生故障時該如何處理,只是說明了我們期望的狀態(比如運行3個副本),swarm 會盡最大的努力達
平臺登錄時,1分鐘內連續錯誤5次建議鎖定帳號5分鐘。
code rda tex cti ogg esc nat factor != 登錄controller package com.zx.znydweb.controller; import java.util.HashMap; import java.util.Map;
【C#懶蛋編程——5分鐘經驗分享】01逆序遍歷刪除,防止叠代器失效
遍歷 編程 下標 而且 再次 元素 [] 解決 方法 因為篇幅很短,所以嘗試全文字寫法。幾分鐘看完的文字也沒必要用十幾分鐘寫完是吧。 foreach遍歷List操作很方便,這節省了部分[]取數據和下標計算的代碼。寫起來很簡潔。但是如果是遍歷刪除的話,你會遇到很經典的叠代器失
【C#懶蛋編程——5分鐘經驗分享】02使用partial關鍵字,分離代碼
編輯 有用 根據 數據 有意 part 關鍵字 自動 conf 因為篇幅很短,所以嘗試全文字寫法。幾分鐘看完的文字也沒必要用十幾分鐘寫完是吧。 C#中的partial關鍵字,是一個非常有用的東西,尤其是在代碼組織方面。 1. 每一個項目都會構建大量的class文件,也需要使
【C#懶蛋編程——5分鐘經驗分享】03使用Description特性標簽,簡化查找表編寫
預處理 分鐘 簡單的 清晰 scrip 開發 [] 使用 如何 因為篇幅很短,所以嘗試全文字寫法。幾分鐘看完的文字也沒必要用十幾分鐘寫完是吧。 Attribute(特性標簽)是C#中非常有用的一個特性,有用到什麽程度呢?以至於C++的很多開發者,都通過自己的預處理器和標簽來
Android 通過程式碼實現控制資料網路的開關(僅適用於5.0以上)
Android 5.0以前使用ConnectivityManager通過反射兩個方法setMobileDataEnabled和getMobileDataEnabled來控制行動網路開和關。 Android 5.0以後使用TelephonyMananger類通過反射獲取setDataEna
android 5.0 titilebar分享
colorAccent,colorPrimary,colorPrimaryDark……來這裡你就明白了 伴隨著Android5.0的釋出也更新了support-v7-appcompat到V21,其中增加了ToolBar、recyclerview、cardview等控制元
Android app快速整合Mob shareSDK分享到微信和QQ
Android app整合Mob shareSDK分享到微信和QQ 線上安裝方法介紹 注意需要用到的appKey和appSecret 請自行到http://www.mob.com官網申請,這裡不介紹申請過程了 進入如
Android下拉重新整理完全解析 教你如何一分鐘實現下拉重新整理功能
最近專案中需要用到ListView下拉重新整理的功能,一開始想圖省事,在網上直接找一個現成的,可是嘗試了網上多個版本的下拉重新整理之後發現效果都不怎麼理想。有些是因為功能不完整或有Bug,有些是因為使用起來太複雜,十全十美的還真沒找到。因此我也是放棄了在網上找現成程式碼的想法,
Android 通過程式碼實現控制資料網路的開關(僅適用於5.0以上)
Android 5.0以前使用ConnectivityManager通過反射兩個方法setMobileDataEnabled和getMobileDataEnabled來控制行動網路開和關。 Android 5.0以後使用TelephonyMananger類通過反射獲取set
Android EditText限制輸入字元的5種實現方式
最近專案要求限制密碼輸入的字元型別, 例如不能輸入中文。 現在總結一下EditText的各種實現方式, 以比較各種方法的優劣。 第一種方式: 設定EditText的inputType屬性,可以通過xml或者java檔案來設定。假如我要設定為顯示