这是在 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'
第三步:
现在添加一个新的 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)));
}
}
第四步:
在"res" 文件夹下创建一个名为"xml" 的文件夹。 (如果文件夹已经存在,则无需创建)。现在在xml 文件夹中添加一个providers_path.xml 文件。这是屏幕截图:
在文件内添加以下行:
<?xml version="1.0" encoding="utf-8"?>
<paths>
<files-path name="stuff" />
</paths>
第五步:
现在转到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 行和这 2 个方法:
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" 一样,它将在文档阅读器应用程序中打开文档文件。