app 打开办公软件的

318 阅读2分钟

通过Android手机打开office的方法

通过webview的形式打开

google和微软有在线预览office软件的url

google:docs.google.com/viewer?url=…

微软:view.officeapps.live.com/op/view.asp…

对文档完全没有安全方面的考虑,建议使用微软的在线解析,亲测可用,谷歌的在国内被封了

WebView urlWebView = (WebView) findViewById(R.id.containWebView);

urlWebView.setVisibility(View.VISIBLE);

mLvAttach.setVisibility(View.GONE);

urlWebView.setWebViewClient(newAppWebViewClients());

urlWebView.getSettings().setJavaEnabled(true);

urlWebView.getSettings().setUseWideViewPort(true);

urlWebView.loadUrl("xxxx”);

下载到本地通过intent打开

val intent = Intent("android.intent.action.VIEW")
intent.addCategory("android.intent.category.DEFAULT")
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
var uri:Uri
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
    intent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION;
    //记得修改com.xxx.fileprovider与androidmanifest相同
    uri =
        FileProvider.getUriForFile(context!!,"com.xxx.fileprovider",File(path))
    intent.setDataAndType(uri,"application/vnd.android.package-archive");
}else{
    uri = Uri.parse("file://$path")
}
intent.setDataAndType(uri, "application/*")
this.startActivity(intent)

我们需要了解 MIME_MapTable是所有文件的后缀名所对应的MIME类型

{".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"}, \
{"", "*/*"}

备注

对于面向 Android 7.0 的应用,Android 框架执行的 StrictMode API 政策禁止在您的应用外部公开 file://URI。传递软件包网域外的 file://URI 可能给接收器留下无法访问的路径。因此,尝试传递 file://URI会触发 FileUriExposedException。分享私有文件内容的推荐方法是使用 FileProvider