如果仅仅为了一个分享功能就接入第三方的sdk的话,会增加很多apk的体积。所以我们可以自己实现一键分享到第三方。
这里以分享文字图片到微信以及微信朋友圈为例。
其它的比如新浪微博,qq好友,qq空间的分享也是一样的。
先看效果:
关键代码:
分享文字:
//指定Action
intent.setAction(Intent.ACTION_SEND);
//指定分享类型
intent.setType("text/plain");
//设置分享的标题和文字
String title="this is test!";
String desc="this is content!";
intent.putExtra(Intent.EXTRA_TEXT, desc);
if(title!=null){
intent.putExtra(Intent.EXTRA_SUBJECT, title);
}
//启动分享intent
startActivity(intent);
分享图片:
intent.setAction(Intent.ACTION_SEND);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_STREAM, img_uri);
注意:如果是分享图片的话就必须使用sd卡上的图片的uri.
指定分享到微信:
ComponentName comp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareImgUI");
intent.setComponent(comp);
指定分享到朋友圈
ComponentName comp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareToTimeLineUI");
intent.setComponent(comp);
主代码文件:
MainActivity.java:
package com.example.sharetest;
import android.content.ComponentName;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private Button wenzi;
private Button img;
private Button imgs_to_friends;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
wenzi = (Button) findViewById(R.id.wenzi);
img = (Button) findViewById(R.id.img);
imgs_to_friends = (Button) findViewById(R.id.img_to_friends);
//从sd卡获取图片Uri
String s = "file://" + Environment.getExternalStorageDirectory().getPath() + "/DCIM/Camera/a.jpg";
String s2 = "file://" + Environment.getExternalStorageDirectory().getPath() + "/DCIM/Camera/b.jpg";
Log.i("LHD", "" + "file://" + Environment.getExternalStorageDirectory().getPath() + "/DCIM/Camera/a.jpg");
Log.i("LHD", "" + s);
final Uri img_uri = Uri.parse(s);
final Uri img_uri2 = Uri.parse(s2);
//分享文字到微信好友
wenzi.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Share_text("分享到微信", "小炮的女朋友很漂亮");
}
});
//分享图片到微信好友
img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//分享一张图片
// Share_img(img_uri);
//分享多张图片
Share_imgs_friends(0, img_uri, img_uri2);
}
});
//分享图片到微信朋友圈
imgs_to_friends.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Share_imgs_friends(1, img_uri, img_uri2);
}
});
}
/**
* 分享文字到微信好友
*
* @param wechat_title
* @param wechat_desc
*/
private void Share_text(String wechat_title, String wechat_desc) {
Intent intent = new Intent();
//如果指定这个包就会直接启动微信
ComponentName comp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareImgUI");
intent.setComponent(comp);
intent.setAction(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, wechat_desc);
if (wechat_title != null) {
intent.putExtra(Intent.EXTRA_SUBJECT, wechat_title);
}
startActivity(intent);
}
/**
* 分享一张图片到微信好友 参数是图片的uri,图片必须是SD卡的图片
* @param img_uri
*/
private void Share_img(Uri img_uri) {
Intent intent = new Intent();
//指定分享到微信
ComponentName comp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareImgUI");
intent.setComponent(comp);
//分享到whatsapp
// ComponentName comp = new ComponentName("com.whatsapp", "com.whatsapp.ContactPicker");
// intent.setComponent(comp);
intent.setAction(Intent.ACTION_SEND);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_STREAM, img_uri);
//如果指定分享到某一平台,就直接启动。
startActivity(intent);
//如果没有指定分享到某个平台可以使用系统提供的选择器,第二个参数是选择器的title
// startActivity(Intent.createChooser(intent, "Share images to.."));
}
/**
* 分享多张图片到朋友圈,注意这个Uri参数必须是从sdk获得的图片,也就是说
* 分享的图片必须是SDK里取出的图片,而不能是资源文件里的图片。
*
*/
private void Share_imgs_friends(int i, Uri... list) {
ArrayList<Uri> imageUris = new ArrayList<Uri>();
for (Uri u : list) {
imageUris.add(u);
}
Intent shareIntent = new Intent();
//i==1,表示分享到朋友圈
if (i == 1) {
ComponentName comp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareToTimeLineUI");
shareIntent.setComponent(comp);
}
shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE);
shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);
shareIntent.setType("image/*");
startActivity(Intent.createChooser(shareIntent, "Share images to.."));
}
}
注意:
如果我们指定要分享到微信或者其它的第三方平台就:
//如果指定分享到某一平台,就直接启动。
startActivity(intent);
//如果没有指定分享到某个平台可以使用系统提供的选择器,第二个参数是选择器的title
//
startActivity(Intent.createChooser(intent, “Share images to..”));
代码下载: