1. 配置文件AndroidManifest.xml中添加
<!--6.0 需要动态权限获取-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
</application>
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.test.imfit.fileprovider"<!--com.test.imfit改为自己的项目包名-->
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
</provider>
</application>
2. 资源目录 res下的 xml (没有这个目录创建一个)目录中创建provider_paths.xml, 以下是内容
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<paths>
<!--<root-path
name="sd_photos"
path="" />存储卡根目录(root-path与external-path 只写其一即可)-->
<external-path
name="external_paths"
path="" /><!--存储卡根目录下的子目录(path不填写为泛指向, 如果想指向具体子目录, 例如: path="DCIM/" 即可)-->
<files-path
name="imfit_paths"
path=""/><!--Android/data/应用根目录/files/下的子目录-->
</paths>
</resources>
3. 调用分享的代码
public void share() {
int measuredWidth = mShareImg.getMeasuredWidth();
int measuredHeight = mShareImg.getMeasuredHeight();
Bitmap bitmap = Bitmap.createBitmap(measuredWidth, measuredHeight, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
mShareImg.draw(canvas);
//mShareImg是这个Activity最外层布局CardView
//view转Bitmap的Uri路径
Uri uri = Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, null, null));
// //指定要分享的图片SD卡路径
// File outputImage = new File(Environment.getExternalStorageDirectory(), "IMFIT/photo.jpg");
// Uri uri = null;
// if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
// uri = Uri.fromFile(outputImage);
// } else {//7.0 以后Uri不能直接获取flie://xxx.jpg路径,
// //需要使用fileprovider获取content://com.test.imfit.fileprovider/external_paths/xxx.jpg这样形式的路径,
// //7.0后增加的文件访问安全机制.
// //com.test.imfit.fileprovider与 manifest中 android:authorities="com.test.imfit.fileprovider"一样
// uri = FileProvider.getUriForFile(getApplicationContext(), "com.test.imfit.fileprovider", outputImage);
// }
// LogUtils.e("gy", "imgUri: " + uri);
//三方库分享调用
new Share2.Builder(this)
// 指定分享的文件类型
.setContentType(ShareContentType.IMAGE)
// 设置要分享的文件 Uri
.setShareFileUri(uri)
// 设置分享选择器的标题
.setTitle("Share")
.build()
// 发起分享
.shareBySystem();
//系统调用分享
/*Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
shareIntent.setType("image/*");
shareIntent = Intent.createChooser(shareIntent, "Share");
startActivity(shareIntent);*/
//用view转Bitmap的Uri路径方式分享, 会在系统相册自动生成一个图片, 如果不想保存这个图片, 分享成功后可以自行删除.
}
4. 三方库引用, 在build.gradle(app) 中 dependencies里面
dependencies {
// 三方分享
implementation 'gdut.bsx:share2:0.9.3'
}
效果
mShareImg布局view转的Bitmap
弹出的系统分享界面
分享到QQ我的电脑