【安卓开发】调用系统原生的文件分享功能将文件分享给QQ或微信好友
调用系统原生的文件分享功能将文件分享给QQ或微信好友,废话不多,直接上代码
·
调用系统原生的文件分享功能将文件分享给QQ或微信好友
核心代码:
//传入的fileName是文件名的全路径
@SuppressLint("QueryPermissionsNeeded")
private void shareFile(String fileName) {
final Uri uri;
final File file = new File(fileName);
int currentapiVersion = android.os.Build.VERSION.SDK_INT;
if (currentapiVersion >= 24) {//若SDK大于等于24 获取uri采用共享文件模式
// Log.e(TAG, "版本大于24,获取uri采用共享文件模式, 根目录:" + Environment.getExternalStorageDirectory().getPath());
uri = FileProvider.getUriForFile(this.getApplicationContext(), "你的包名.fileprovider", file);
} else {
uri = Uri.fromFile(file);
}
Intent share = new Intent(Intent.ACTION_SEND);
share.putExtra(Intent.EXTRA_STREAM, uri);
share.setType(/*"application/pdf"*/getMIMEType(new File(file.getAbsolutePath())));//此处可发送多种文件
share.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
share.addCategory(Intent.CATEGORY_DEFAULT);
share.setPackage("com.tencent.mobileqq");
//若需要分享到微信,只需要更改Package即可
//share.setPackage("com.tencent.mm")
if (share.resolveActivity(RowDataDirListActivity.this.getPackageManager()) != null)
{
RowDataDirListActivity.this.startActivity(share);
} else {
ToastUtils.show("没有可以处理该pdf文件的应用");
}
}
getMIMEType()方法:
private String getMIMEType(File file) {
String type="*/*";
String fName = file.getName();
//获取后缀名前的分隔符"."在fName中的位置。
int dotIndex = fName.lastIndexOf(".");
if(dotIndex < 0)
return type;
/* 获取文件的后缀名 */
String fileType = fName.substring(dotIndex,fName.length()).toLowerCase();
if("".equals(fileType))
return type;
//在MIME和文件类型的匹配表中找到对应的MIME类型。
for(int i = 0; i< FileUtils.MIME_MapTable.length; i++){
if(fileType.equals(FileUtils.MIME_MapTable[i][0]))
type = FileUtils.MIME_MapTable[i][1];
}
return type;
}
需要在AndroidManifest.xml中添加配置
<application
...
<provider
android:authorities="你的包名.fileprovider"
android:name="androidx.core.content.FileProvider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths"/>
</provider>
...
</application>
在res文件夹里创建一个xml文件夹, 并创建filepaths.xml文件
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path path="你需要访问的文件夹去掉根目录/" name="files_path" />
</paths>
external-path 就代表了 Environment.getExternalStorageDirectory().getPath()。
更多推荐
已为社区贡献1条内容
所有评论(0)