我需要一种方法,当提供文件路径时,表示文件已打开(我已经拥有管理所有文件的用户权限)。让我更接近我想要的代码是这样的:
val sfile: String = "/document/primary:11796018.pdf"
val uri = Uri.parse(sfile)
val intent = Intent(Intent.ACTION_VIEW)
intent.setType("application/pdf")
intent.putExtra(Intent.ACTION_VIEW, uri)
startActivity(Intent.createChooser(intent, "Open file"))
出现选择应用程序打开所述 pdf 的屏幕,但没有任何反应,有什么帮助可以解决问题吗?
我的 Android 清单如下所示:
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
和像这样的“file_paths”:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/>
</paths>
好的,明白了:
我的文件恰好位于下载文件夹中,所以我必须添加这行代码:
val pdfFileName = "example.pdf"
val pdfFile = File(
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),
pdfFileName
)
if (pdfFile.exists()) {
val path = FileProvider.getUriForFile(Objects.requireNonNull(getApplicationContext()),
BuildConfig.APPLICATION_ID + ".provider", pdfFile);
val pdfIntent = Intent(Intent.ACTION_VIEW)
pdfIntent.setDataAndType(path, "application/pdf")
pdfIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
pdfIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
try {
startActivity(pdfIntent)
} catch (e: ActivityNotFoundException) {
// If there is no PDF reader installed, prompt the user to install one
// Handle the exception as needed
}
} else {
// Handle the case where the PDF file doesn't exist
}
我也有管理所有文件的权限,你可以获得这个权限
val uri = Uri.parse("package:com.example.qrcodekotlin")
startActivity(
Intent(
Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION,
uri
)
)