有没有办法打开.doc扩展名文件?
答案 0 :(得分:30)
与iOS不同,Android本身不支持渲染.doc或.ppt文件。您正在寻找一种公共意图,允许您的应用重用其他应用的活动来显示这些文档类型。但这只适用于安装了支持此Intent的应用的手机。
http://developer.android.com/guide/topics/intents/intents-filters.html
或者如果您已经安装了某个应用程序,那么请使用此Intent:
//Uri uri = Uri.parse("file://"+file.getAbsolutePath());
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(Intent.ACTION_VIEW);
String type = "application/msword";
intent.setDataAndType(Uri.fromFile(file), type);
startActivity(intent);
答案 1 :(得分:13)
以下是一种为您解决此问题的方法:
public void openDocument(String name) {
Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
File file = new File(name);
String extension = android.webkit.MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(file).toString());
String mimetype = android.webkit.MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
if (extension.equalsIgnoreCase("") || mimetype == null) {
// if there is no extension or there is no definite mimetype, still try to open the file
intent.setDataAndType(Uri.fromFile(file), "text/*");
} else {
intent.setDataAndType(Uri.fromFile(file), mimetype);
}
// custom message for the intent
startActivity(Intent.createChooser(intent, "Choose an Application:"));
}
答案 2 :(得分:10)
从可用应用程序列表中打开文档 用户必须从应用程序列表中选择应用程序
File targetFile = new File(path);
Uri targetUri = Uri.fromFile(targetFile);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(targetUri, "application/*");
startActivityForResult(intent, DOC);
答案 3 :(得分:3)
如果要在应用内打开,可以在webview中打开文件。 例如:
String doc="<iframe src='http://docs.google.com/viewer? url=http://www.iasted.org/conferences/formatting/presentations-tips.ppt&embedded=true'"+
" width='100%' height='100%' style='border: none;'></iframe>";
WebView wv = (WebView)findViewById(R.id.fileWebView);
wv.getSettings().setJavaScriptEnabled(true);
wv.getSettings().setAllowFileAccess(true);
//wv.loadUrl(doc);
wv.loadData( doc , "text/html", "UTF-8");
答案 4 :(得分:0)
您可以将文件从原始资源复制到sdcard,然后在ACTION_VIEW Intent上调用startActivity(),其中Uri指向可读副本,并且具有正确的MIME类型。
当然,这只适用于上面有Word文档查看器的设备。
答案 5 :(得分:0)
以下是在Android 7.0或更低版本中打开.doc文件的完整方法:
<强>步骤1:强> 首先,将您的pdf文件放在assets文件夹中,如下面的屏幕截图所示。
<强>步骤-2:强> 现在转到build.gradle文件并添加以下行:
repositories {
maven {
url "https://s3.amazonaws.com/repo.commonsware.com"
}
}
然后在依赖项下添加以下行并同步:
compile 'com.commonsware.cwac:provider:0.4.3'
<强>步骤-3:强>
现在添加一个新的java文件,该文件应该从FileProvider
延伸。就像我的情况一样,文件名是LegacyCompatFileProvider
并且代码在其中。
import android.database.Cursor;
import android.net.Uri;
import android.support.v4.content.FileProvider;
import com.commonsware.cwac.provider.LegacyCompatCursorWrapper;
public class LegacyCompatFileProvider extends FileProvider {
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
return(new LegacyCompatCursorWrapper(super.query(uri, projection, selection, selectionArgs, sortOrder)));
}
}
<强>步骤-4:强>
在"xml"
文件夹下创建名为"res"
的文件夹。 (如果文件夹已经存在则无需创建)。现在在providers_path.xml
文件夹中添加xml
文件。这是截图:
内部文件添加以下行:
<?xml version="1.0" encoding="utf-8"?>
<paths>
<files-path name="stuff" />
</paths>
<强>步骤5:强>
现在转到AndroidManifest.xml
文件,然后点击<application></application>
标记中的行:
<provider
android:name="LegacyCompatFileProvider"
android:authorities="REPLACE_IT_WITH_PACKAGE_NAME"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
<强>步骤-6:强> 现在转到要从中加载pdf的Activity类,并添加以下1行和这两个方法:
private static final String AUTHORITY="REPLACE_IT_WITH_PACKAGE_NAME";
static private void copy(InputStream in, File dst) throws IOException {
FileOutputStream out=new FileOutputStream(dst);
byte[] buf=new byte[1024];
int len;
while ((len=in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
}
private void LoadPdfFile(String fileName){
File f = new File(getFilesDir(), fileName + ".doc");
if (!f.exists()) {
AssetManager assets=getAssets();
try {
copy(assets.open(fileName + ".doc"), f);
}
catch (IOException e) {
Log.e("FileProvider", "Exception copying from assets", e);
}
}
Intent i=
new Intent(Intent.ACTION_VIEW,
FileProvider.getUriForFile(this, AUTHORITY, f));
i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(i);
finish();
}
现在调用LoadPdfFile
方法并传递您的文件名,而不是.doc
,就像我的案例"chapter-0"
一样,它将在doc reader应用程序中打开doc文件。