android常用sdk分享,Android系統分享,微信SDK分享,ShareSdk分享

1.調用系統分享功能:

//分享文字

private void shareText() {

Intent it = new Intent(Intent.ACTION_SEND);

it.setType("text/plain");

it.putExtra(Intent.EXTRA_TEXT,"http://stormzhang.com/posts/");

it.putExtra(Intent.EXTRA_SUBJECT,"張大帥氣的博客");

startActivity(Intent.createChooser(it,"分享到"));

}

//分享單張圖片

private void shareImage() {

Intent it1 = new Intent(Intent.ACTION_SEND);

it1.setType("image/jpg");

String path = Environment.getExternalStorageDirectory() + File.separator + "a.jpg";

Uri uri = Uri.fromFile(new File(path));

it1.putExtra(Intent.EXTRA_STREAM,uri);

startActivity(it1);

}

//分享多張圖片

private void shareImages() {

Intent it2 = new Intent(Intent.ACTION_SEND_MULTIPLE);

it2.setType("image*/");

ArrayList uriList = new ArrayList();

String path = Environment.getExternalStorageDirectory() + File.separator;

uriList.add(Uri.fromFile(new File(path+"a.jpg")));

uriList.add(Uri.fromFile(new File(path+"b.jpg")));

it2.putParcelableArrayListExtra(Intent.EXTRA_STREAM,uriList);

}

it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

private String getSDPath() {

File sdDir = null;

//判斷sd卡是否存在

boolean sdCardExist = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);

if (sdCardExist){

sdDir = Environment.getExternalStorageDirectory();//獲取根目錄

}else{

Log.i(TAG, "getSDPath: "+"sd卡不存在");

}

return sdDir.toString();

}

我的思考:系統分享圖片,讀取sd卡的圖片,文件路徑寫到/DCIM/Camera不能發送出去,寫/DCIM/Camera/a.jpg顯示為無效文件,喵嗚~

用Uri.parse("一個網址");怎么不可以呢,喵嗚~

解決方案:向文件種寫入圖片

private void shareImage() {

File f = new File(Environment.getExternalStorageDirectory(), "back");

Log.i(TAG, "shareImage: " + f);//-----------/storage/emulated/0/back

if (f.exists()) {

f.delete();

}

try {

FileOutputStream out = new FileOutputStream(f);

Bitmap bm = BitmapFactory.decodeResource(getResources(), R.mipmap.aaa);//加載圖片(res,id)

bm.compress(Bitmap.CompressFormat.PNG, 90, out);//壓縮圖片 90是壓縮率 表示壓縮10% 不壓縮是100.表示壓縮率為0-----壓縮圖片然后寫入文件中

out.flush();

out.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

Intent it = new Intent(Intent.ACTION_SEND);

ComponentName comp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareImgUI");//單張圖片

// ComponentName comp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareToTimeLineUI");//多張圖片

it.setComponent(comp);

it.setType("image/*");

it.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(f));

startActivity(Intent.createChooser(it, "分享到"));

}

重點:系統分享不能分享文字+圖片的   文字不能分享到盆友圈     單張圖片分享至盆友圈資源獲取失敗

注意:由於分享功能是使用隱式調用activity實現的,則需在響應的activity中聲明intent-filter,在對應的activity的xml文件里加上

2.微信SDK分享

package com.example.a27c1.share_demo;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;

import com.tencent.mm.sdk.modelmsg.SendMessageToWX;

import com.tencent.mm.sdk.modelmsg.WXMediaMessage;

import com.tencent.mm.sdk.modelmsg.WXWebpageObject;

import com.tencent.mm.sdk.openapi.IWXAPI;

import com.tencent.mm.sdk.openapi.WXAPIFactory;

public class MainActivity extends AppCompatActivity {

private static final String APP_ID = "wxe9ba6ca169c4fc00";

private IWXAPI iwxapi;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

iwxapi = WXAPIFactory.createWXAPI(MainActivity.this,APP_ID,true);

iwxapi.registerApp(APP_ID);

shareWX();

}

});

}

private void shareWX() {

WXWebpageObject webpage = new WXWebpageObject();

webpage.webpageUrl="http://stormzhang.com/";

WXMediaMessage msg = new WXMediaMessage(webpage);

msg.title="stormzhang";

msg.description="張大帥氣的博客";

SendMessageToWX.Req req = new SendMessageToWX.Req();

req.transaction = String.valueOf(System.currentTimeMillis());

req.message = msg;

req.scene = SendMessageToWX.Req.WXSceneSession;

iwxapi.sendReq(req);

}

}

proguard-rules.pro:

-keep class com.tencent.mm.sdk.** {

*;

}還有權限和導包

3.ShareSDK分享:

package com.example.a27c1.share_demo;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;

import com.review.signature.Review;

import cn.sharesdk.framework.Platform;

import cn.sharesdk.framework.ShareSDK;

import cn.sharesdk.onekeyshare.OnekeyShare;

import cn.sharesdk.onekeyshare.ShareContentCustomizeCallback;

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Review.MD5Review(this, "com.example.a27c1.share_demo", "15b50fe01696c3dd890ab2892c541b7b");

ShareSDK.initSDK(this);

findViewById(R.id.btn_shareSDK).setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

showShare();

}

});

}

private void showShare() {

ShareSDK.initSDK(this);

OnekeyShare oks = new OnekeyShare();

oks.disableSSOWhenAuthorize();//關閉sso授權

// 分享時Notification的圖標和文字 2.5.9以后的版本不調用此方法

//oks.setNotification(R.drawable.ic_launcher, getString(R.string.app_name));

// title標題,印象筆記、郵箱、信息、微信、人人網和QQ空間使用

oks.setTitle("stormzhang");

// titleUrl是標題的網絡鏈接,僅在人人網和QQ空間使用

oks.setTitleUrl("http://sharesdk.cn");

// text是分享文本,所有平台都需要這個字段

oks.setText("張大帥氣的博客");

// imagePath是圖片的本地路徑,Linked-In以外的平台都支持此參數

//oks.setImagePath("/sdcard/test.jpg");//確保SDcard下面存在此張圖片

// url僅在微信(包括好友和朋友圈)中使用

oks.setUrl("http://stormzhang.com/");

// comment是我對這條分享的評論,僅在人人網和QQ空間使用

oks.setComment("我是測試評論文本");

// site是分享此內容的網站名稱,僅在QQ空間使用

oks.setSite(getString(R.string.app_name));

// siteUrl是分享此內容的網站地址,僅在QQ空間使用

oks.setSiteUrl("http://sharesdk.cn");

oks.setImageUrl("http://f1.sharesdk.cn/imgs/2014/02/26/owWpLZo_638x960.jpg");

oks.setShareContentCustomizeCallback(new ShareContentCustomizeCallback() {

@Override

public void onShare(Platform platform, cn.sharesdk.framework.Platform.ShareParams paramsToShare) {

if ("QZone".equals(platform.getName())) {

paramsToShare.setTitle(null);

paramsToShare.setTitleUrl(null);

}

if ("SinaWeibo".equals(platform.getName())) {

paramsToShare.setUrl(null);

paramsToShare.setText("分享文本 http://www.baidu.com");

}

if ("Wechat".equals(platform.getName())) {

Bitmap imageData = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);

paramsToShare.setImageData(imageData);

}

if ("WechatMoments".equals(platform.getName())) {

Bitmap imageData = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);

paramsToShare.setImageData(imageData);

}

}

});

//微信setTitle,setText,setUrl

oks.show(this);// 啟動分享GUI

}

}

ShareSDK常見問題

ShareSDK關於微信分享問題

注意:記得導包 add as library

debug簽名和正式包簽名是不一樣的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 2 3 4 5 $sharesdk.shareContent($sharesdk.platformID.SinaWeibo, params, function (platform, state, shareInfo, error) { alert("state = " + state + "\nshareInfo = " + shareInfo + "\nerror = " + error); }); 一键分享 1 2 3 4 5 $sharesdk.oneKeyShareContent([$sharesdk.platformID.SinaWeibo, $sharesdk.platformID.TencentWeibo], params, function (platform, state, shareInfo, error) { alert("state = " + state + "\nshareInfo = " + shareInfo + "\nerror = " + error); }); 关于具体的分享参数名称,请参考“不同平台分享内容的详细说明”章节的说明。 用户授权 调用ShareSDK中的authorize方法可进行用户授权。代码如下: 1 2 3 4 5 $sharesdk.authorize($sharesdk.platformID.SinaWeibo, function (platform, state, error){ alert("state = " + state + "\nerror = " + error); }); 获取用户资料 调用ShareSDK中的getUserInfo来获取授权用户的信息。代码如下: 1 2 3 4 5 $sharesdk.getUserInfo($sharesdk.platformID.SinaWeibo, function (platform, state, user, error) { alert("state = " + state + "\nuser = " + user + "\nerror = " + error); }); iOS部分集成步骤(不发布iOS版本可略过此部分) 导入JS桥接的iOS版本组件 打开下载的JS包里的iOS/ShareSDKForJS/ShareSDKForJS.xcodeproj项目工程,选择ShareSDKForJS静态库运行Xcode,如图: 700px-js_doc_001.png 运行成功之后,请大家打开文件找到Build文件夹,然后进入文件中找到build/Products/Debug-iphonesimulato /libShareSDKForJS.a文件以及找到build/Products/Debug-iphonesimulator/usr/local /include/ShareSDKJSBridge.h这个文件,再将libShareSDKForJS.a和ShareSDKJSBridge.h这 2个文件导入到你的项目里,如图 700px-js_doc_002.png 注意:(如果在分享中弹不出分享的菜单,如果大家的ShareSDK.js文件是本地的,要把这个加到Build Phases里面的Copy Bundle Resources选项) 下载iOS版本ShareSDK,并导入到工程中。 登录ShareSDK的官方网站下载并解压最新版本的SDK。如果您还尚未下载,请 点击这里下载 或者访问 http://sharesdk.cn/Download 。解压后如图所示: 700px-js_doc_003 将ShareSDK导入工程中,并添加相应的依赖库。此步骤可以参考:《iOS快速集成指南》中的第一、第二步。执行完成后,如下图所示: 700px-js_doc_004.png 为UIWebView添加消息捕获 先导入ShareSDKJSBridge.h头文件。 1 #import "ShareSDKJSBridge.h" 然后给UIWebView设置一个委托对象,如: 1 webView.delegate = self; 注意:webView是UIWebView的对象实例。 最后实现shouldStartLoadWithRequest委托方法,并在方法中加入JSBridge的captureRequest方法,代码如下: 1 2 3 4 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { return ![[ShareSDKJSBridge sharedBridge] captureRequest:request webView:webView]; } 添加完毕后就可以对工程进行运行测试。 Android部分集成步骤(不发布Android版本可略过此部分) 导入的步骤如下: 1、参考”安卓快速集成文档“章节的说明,导入ShareSDK for Android的jar库和图片、文字资源。 2、复制github上的jsdemo项目中”cn.sharesdk.js”包中的源代码复制到你的项目中。QQ截图20150304142013 3、在您WebView加载页面地址之前。调用ShareSDKUtils.prepare(webview, webviewClient); 请注意,ShareSDKUtils.prepare方法要在WebView.setWebViewClient(WebViewClinet);之后调用,而且此后不能再调用setWebViewClient方法,否则ShareSDK的初始化操作可能失败。 下面的代码来自github上的demo: Objective-C 1 2 3 4 5 6 7 8 9 10 11 12 public class MainActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); WebView wvBody = new WebView(this); WebViewClient wvClient = new WebViewClient(); wvBody.setWebViewClient(wvClient); wvBody.setWebChromeClient(new WebChromeClient() { public boolean onJsAlert(WebView view, String url, String message, JsResult result) { return super.onJsAlert(view, url, message, result); } });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值