您的位置:首页 > 移动开发 > 微信开发

Android系统分享,微信SDK分享,ShareSdk分享

2016-11-26 09:38 337 查看
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<Uri> 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, "分享到"));
}
重点:系统分享不能分享文字+图片的   文字不能分享到盆友圈     单张图片分享至盆友圈资源获取失败

Android实现分享内容到微信朋友圈

微信分享(发送到朋友,发送到朋友圈)

注意:由于分享功能是使用隐式调用activity实现的,则需在响应的activity中声明intent-filter,在对应的activity的xml文件里加上

<!--接收单图-->
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="image/*"/>
</intent-filter>
<!--接收文本-->
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
</intent-filter>
<!--接收多图-->
<intent-filter>
<action android:name="android.intent.action.SEND_MULTIPLE"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="image/*"/>
</intent-filter>


2.微信SDK分享

  Android接入指南

  分享与收藏功能开发文档(Android应用)

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.descriptio
4000
n="张大帅气的博客";
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.** {
*;
}
还有权限和导包
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />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常见问题

Android 不同平台分享内容的详细说明

关于如何检查平台签名的正确性

ShareSDK关于微信分享问题

注意:记得导包 add as library

         debug签名和正式包签名是不一样的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息