使用Intent完成一键分享图文
最牛的效果是做到图文都可以发送,如下::
上面的是用腾讯新闻界面的分享按钮发送的,包含分享、收藏、查看,以及一张封面图、标题和内容文字等布局。
本文并没有做到这个程度,只是做一个记录,以后碰到再学习,也欢迎高人指点。
1. 使用第三方SDK
推荐SDK有如shareSDK等,获取Appkey,按照说明应用即可,分享的界面一般来说无法修改。
2. 使用Intent
2.1 Intent完成文字发送
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.setType("text/plain");
sendIntent.putExtra(Intent.EXTRA_TEXT,"This is text to show.");
shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(Intent.createChooser(shareIntent, "分享到"));
分享时,该方法会自动搜索手机内可以支持该type的所有应用。
2.2 Intent完成单张图片发送
方法1:
- 仅用于尝试,因此起初打算发App内部的Assets中的图片,尝试了以下方法:
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.setType("image/*");
Uri uri = Uri.parse("file:///android_asset/ic_launcher");
//或者ic_launcher.png都不行
sendIntent.putExtra(Intent.EXTRA_STREAM,uri);
shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(Intent.createChooser(shareIntent, "分享到"));
提示找不到文件或者文件无效。
- 寻找相册内图片发送:
Uri uriPic = Uri.fromFile(new File
("content://media/external/images/media/system/"+ "media/Preloaded/Pictures/Picture_A_Skyscraper.jpg"));
sendIntent.putExtra(Intent.EXTRA_STREAM,uriPic);
shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(Intent.createChooser(shareIntent, "分享到"));
仍然提示找不到文件或者文件无效。
- 将Asset内图片在相册复制一份缩略图后发送:
InputStream is;
Bitmap bitmap = null;
try {
is = getAssets().open("ic_launcher.png");
bitmap = BitmapFactory.decodeStream(is);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.err.println("no such file error");
}
Uri uri = Uri.parse(MediaStore.Images.Media.insertImage(
getContentResolver(), bitmap, "ic_launcher.png", null));
sendIntent.putExtra(Intent.EXTRA_STREAM,uri);
shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(Intent.createChooser(shareIntent, "分享到"));
这种方法是对的,会在相册生成该图的缩略图,然后发送。
所以问题来了,我之前在Asset和相册中发送不成功的原因很可能是路径原因,希望有读到此文的高手指点一下,如何分享相册内图片或完成相册内部的分享照片功能。
方法2:
找到单张图片的绝对路径也是可以行得通,之前提示无文件或该文件无效基本都是由于路径问题,将图片放入SD卡中,由于系统不同,绝对路径可能不同,可以进入手机的SD卡路径下,查看该图片的详细信息,会显示绝对路径,将该路径写入程序中的File路径就可以:
String fileName = "storage/sdcard1/DCIM/Camera/q1.png";
File file = new File(fileName); shareIntent.setType("image/*"); shareIntent.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(file));
shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(Intent.createChooser(shareIntent, "分享到"));
实测通过
2.3 Intent完成多张图片发送
暂未实现
2.4 Intent完成图片+文字发送
暂未实现