我正在尝试从我的应用程序打开pdf文件,以打开Nougat中的默认文档查看器。
这不是重复的原因,因为我与其他人有不同的问题,所以请阅读至结束。
我尝试过的事情:
我知道我必须使用FileProvider,Make provider.xml,获取有关访问该应用程序的运行时权限。
在 AndroidManifest.xml
中 <provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
</provider>
我的 GenericFileProvider
public class GenericFileProvider extends FileProvider {}
provider_path.xml
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/>
</paths>
openign pdf
val file = File(Environment.getExternalStorageDirectory().toString()+"pdfname")
val intent = Intent()
intent.action = Intent.ACTION_VIEW
val uri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", file)
context.grantUriPermission("com.google.android.apps.docs", uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION or Intent.FLAG_GRANT_READ_URI_PERMISSION)
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
intent.setDataAndType(uri, "application/pdf")
context.startActivity(intent)
我的问题是:
在查看我的pdf时,其第一个字符已更改。 因此会生成未找到文件的异常
当我使用此提供程序路径时。 它删除了我的pdf名称的第一个字符
my file name is : /storage/emulated/0on the matter of.pdf
my uri is : content://mypackage.provider/root/storage/emulated/0on%20the%20matter%20of.pdf
so pdf name is : n the matter of.pdf
当使用provider_path this时。
<root-path
name="root"
path="/" />
它为我的pdf名称添加了0
my file name is : /storage/emulated/0on the matter of.pdf
my uri is : content://mypackage.provider/root/storage/emulated/0on%20the%20matter%20of.pdf
so pdf name is : 0on the matter of.pdf
我应该怎么做才能正确获取pdf名称。我应该在提供程序路径中写些什么。
答案 0 :(得分:0)
感谢@VladyslavMatviienko和@greenapps。我已经解决了我的问题。
如@VladyslavMatviienko所指出。我传递的文件路径错误。
val file = File(Environment.getExternalStorageDirectory().toString()+"pdfname")
代替
val file = File(Environment.getExternalStorageDirectory().toString()+"/pdfname")
因此,它表明java.io.FileNotFoundException:
因此,我的问题中发布的所有内容都可以在Oreo中向我的应用程序向查看器显示pdf正常工作。所以也许它将帮助某人。