android打开与分享文件
Posted 楠之枫雪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android打开与分享文件相关的知识,希望对你有一定的参考价值。
- 创建fileProvider
<application>//放在application中
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.h3c.sharedemo.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths"
/>
</provider>
</application>
- 创建filepaths
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path
name="files-path"
path="." />
<cache-path
name="cache-path"
path="." />
<external-path
name="external_storage_root"
path="." />
<external-files-path
name="external_file_path"
path="." />
<external-cache-path
name="external_cache_path"
path="." />
<root-path
name="root-path"
path="" />
</paths>
- 通过intent分享
Intent intent =new Intent(Intent.ACTION_SEND);
intent.setType(FileUtil.getMIMEType(picFile));
Uri contentUri = FileProvider.getUriForFile(context, picFile);
intent.putExtra(Intent.EXTRA_STREAM,contentUri);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
ComponentName comp = new ComponentName(packageName, activityName);
intent.setComponent(comp);//这里指导打开的应用,不需要选择,因为我自定义应用选择器
context.startActivity(intent);
- 通过intent查看
Intent intent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
intent.setAction(Intent.ACTION_VIEW);
String type = FileUtil.getMIMEType(picFile);
try {
Log.e("getMIMEType", type);
intent.setDataAndType(FileProvider.getUriForFile(context, picFile), type);
context.startActivity(intent);
} catch (Exception e) {
Log.e(tag, e.toString());
}
FileProvider:
public class FileProvider {
public static Uri getUriForFile(Context context, File file) {
Uri fileUri;
if (Build.VERSION.SDK_INT >= 24) {
fileUri = getUriForFile24(context, file);
} else {
fileUri = Uri.fromFile(file);
}
return fileUri;
}
public static Uri getUriForFile24(Context context, File file) {
Uri fileUri = androidx.core.content.FileProvider.getUriForFile(context,
"com.h3c.sharedemo.fileprovider",
file);
return fileUri;
}
MineType获取:
/**
* @param file file
* @return getMIMEType
*/
public static String getMIMEType(File file) {
String type = "*/*";
String name = file.getName();
int index = name.lastIndexOf('.');
if (index < 0) {
return type;
}
String end = name.substring(index).toLowerCase();
if (TextUtils.isEmpty(end)) return type;
for (String[] strings : MIME_MapTable) {
if (end.equals(strings[0])) type = strings[1];
}
return type;
}
private static final String[][] MIME_MapTable = {
{".flv", "video/flv"},
{".3gp", "video/3gpp"},
{".apk", "application/vnd.android.package-archive"},
{".asf", "video/x-ms-asf"},
{".avi", "video/x-msvideo"},
{".bin", "application/octet-stream"},
{".bmp", "image/bmp"},
{".c", "text/plain"},
{".class", "application/octet-stream"},
{".conf", "text/plain"},
{".cpp", "text/plain"},
{".doc", "application/msword"},
{".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"},
{".xls", "application/vnd.ms-excel"},
{".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},
{".exe", "application/octet-stream"},
{".gif", "image/gif"},
{".gtar", "application/x-gtar"},
{".gz", "application/x-gzip"},
{".h", "text/plain"},
{".htm", "text/html"},
{".html", "text/html"},
{".jar", "application/java-archive"},
{".java", "text/plain"},
{".jpeg", "image/jpeg"},
{".jpg", "image/jpeg"},
{".js", "application/x-javascript"},
{".log", "text/plain"},
{".m3u", "audio/x-mpegurl"},
{".m4a", "audio/mp4a-latm"},
{".m4b", "audio/mp4a-latm"},
{".m4p", "audio/mp4a-latm"},
{".m4u", "video/vnd.mpegurl"},
{".m4v", "video/x-m4v"},
{".mov", "video/quicktime"},
{".mp2", "audio/x-mpeg"},
{".mp3", "audio/x-mpeg"},
{".mp4", "video/mp4"},
{".mpc", "application/vnd.mpohun.certificate"},
{".mpe", "video/mpeg"},
{".mpeg", "video/mpeg"},
{".mpg", "video/mpeg"},
{".mpg4", "video/mp4"},
{".mpga", "audio/mpeg"},
{".msg", "application/vnd.ms-outlook"},
{".ogg", "audio/ogg"},
{".pdf", "application/pdf"},
{".png", "image/png"},
{".pps", "application/vnd.ms-powerpoint"},
{".ppt", "application/vnd.ms-powerpoint"},
{".pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation"},
{".prop", "text/plain"},
{".rc", "text/plain"},
{".rmvb", "audio/x-pn-realaudio"},
{".rtf", "application/rtf"},
{".sh", "text/plain"},
{".tar", "application/x-tar"},
{".tgz", "application/x-compressed"},
{".txt", "text/plain"},
{".wav", "audio/x-wav"},
{".wma", "audio/x-ms-wma"},
{".wmv", "audio/x-ms-wmv"},
{".wps", "application/vnd.ms-works"},
{".xml", "text/plain"},
{".z", "application/x-compress"},
{".zip", "application/x-zip-compressed"},
{"", "*/*"}
};
- 注意。如果Android10及以上,必须在application中添加下面一句,否则将无法读取到文件数据
android:requestLegacyExternalStorage="true"
以上是关于android打开与分享文件的主要内容,如果未能解决你的问题,请参考以下文章