如何在Android的Webview中打开Excel、.doc文件?

12

我该如何在Android webview中打开Excel和.doc文件?谷歌文档是否支持此功能?


1
这可能会对你有所帮助:http://stackoverflow.com/q/8240294/940096 - Praveenkumar
我想在我的Android项目中尝试在Webview中打开Excel和.doc文件,但它无法打开。请问有人可以帮忙吗?谢谢! - Ashwani Tyagi
请问您能分享您编写的代码吗?这样我就可以看到代码并轻松检查它。 - Google
可能是在WebView中打开PDF的重复问题。 - Tofeeq Ahmad
请查看这个链接,它是做这件事的最佳解决方案:https://dev59.com/y2cs5IYBdhLWcg3wgkIQ#12797706/ - Jonas Czech
2个回答

31

是的,谷歌文档支持展示文档、Excel、PDF、txt或其他格式。

WebView urlWebView = (WebView)findViewById(R.id.containWebView);
urlWebView.setWebViewClient(new AppWebViewClients());
urlWebView.getSettings().setJavaScriptEnabled(true);
urlWebView.getSettings().setUseWideViewPort(true);
urlWebView.loadUrl("http://docs.google.com/gview?embedded=true&url="
                + "YOUR_DOC_URL_HERE"); 

public class AppWebViewClients extends WebViewClient {



    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // TODO Auto-generated method stub
        view.loadUrl(url);
        return true;
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        // TODO Auto-generated method stub
        super.onPageFinished(view, url);

    }
}

3
谢谢。它的效果很棒。我能将本地文档加载到其中吗?也就是说,我已经在SD卡中下载了.doc文件,现在想用这个应用程序来展示它们。所以这可以实现吗? - YuDroid
如果我的文档在资产文件夹中,如何加载它? - AndroidGuy
它能加载 pptx 文件类型吗? - kondal

5
如果你想从内部存储打开文档文件,例如 file:///data/user/0/com.sample.example/files/documents/sample.docx,那么你不能使用
urlWebView.loadUrl("http://docs.google.com/gview?embedded=true&url="+"YOUR_DOC_URL_HERE");

您需要从外部应用程序(如Google Docs、MS Word等)打开docx文件。为此,您可以使用FileProvider


在AndroidManifest.xml文件中添加<provider>

<application>
 <provider
   android:name="androidx.core.content.FileProvider"
   android:authorities="com.sample.example.provider" // you have to provide your package name here add add .provider after your package name
   android:exported="false"
   android:grantUriPermissions="true">
   <meta-data
      android:name="android.support.FILE_PROVIDER_PATHS"
      android:resource="@xml/file_paths" />
 </provider>
</application>

添加res/xml/file_paths.xml文件

<?xml version="1.0" encoding="utf-8"?>
<paths>
  <root-path name="root" path="." />
</paths>

最后,在MainActivity.java文件中添加用于打开.docx文件的代码。

StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
builder.detectFileUriExposure();

Uri docUri = FileProvider.getUriForFile(getApplicationContext(), 
  "com.sample.example.provider", 
  new File("/data/user/0/com.sample.example/files/documents/sample.docx")); // same as defined in Manifest file in android:authorities="com.sample.example.provider"
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(docUri, "application/msword");
try{
   intent.setFlags(FLAG_GRANT_READ_URI_PERMISSION | FLAG_GRANT_WRITE_URI_PERMISSION);
   Intent chooser = Intent.createChooser(intent,"Open With..");
   startActivity(chooser);
} catch (ActivityNotFoundException e) {
   //user does not have a pdf viewer installed
   Log.d(LOG_TAG, "shouldOverrideUrlLoading: " + e.getLocalizedMessage());
   Toast.makeText(MainActivity.this, "No application to open file", Toast.LENGTH_SHORT).show();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接