我有一个word文件,已经下载到本地了,
在老版本的手机上是好的,可以弹出所有的应用。
但是在新版本的手机上,弹出的应用选择框,没有包括wps等应用,只有浏览器那个选项。
该如何处理呢?
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = FileProvider.getUriForFile(this, CommonUtils.context.getPackageName() + ".fileProvider", file);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_PREFIX_URI_PERMISSION);
intent.setData(uri);
startActivity(intent);![]
老手机上是正常的:
(https://img2023.cnblogs.com/q/2311000/202305/2311000-20230529174835719-713104766.png)
可能是因为你的应用没有正确地注册 FileProvider,导致系统无法识别你的应用能够处理哪些类型的文件。以下是一些常见的问题以及解决方法:
在你的应用的 AndroidManifest.xml 中,你需要定义一个 FileProvider,并为它指定一个唯一的 authorities 属性。注意,这个属性值必须与你在调用 FileProvider.getUriForFile() 方法时所使用的 authority 参数相同。例如:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.example.myapp.fileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
</provider>
其中,@xml/provider_paths 指向一个 XML 文件,这个文件中定义了你的 FileProvider 可以处理哪些路径。例如:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="." />
<files-path name="files" path="." />
<cache-path name="cache" path="." />
</paths>
这里定义了三个路径:external-path、files-path 和 cache-path,它们分别代表了手机外部存储、应用内部文件和应用内部缓存等三种类型的路径。你需要根据你的具体情况来定义这些路径。
在 Android 6.0(API level 23)及以上的版本中,系统引入了运行时权限的概念,你需要在应用运行时向用户请求具有读写文件的权限。你可以使用该代码行向用户请求存储权限:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE);
}
在 onActivityResult() 方法中,你需要检查用户是否授权了相应的权限:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
super.onActivityResult(requestCode, resultCode, resultData);
if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK) {
Uri uri = resultData.getData();
// 对文件进行操作
}
}
注意,这里的 REQUEST_CODE 是一个自定义的请求码,用于标识你所请求的权限。
在你的应用的 AndroidManifest.xml 文件中,你需要为你可以处理的文件类型注册相应的 intent-filter。例如,如果你想要处理 docx 格式的 Word 文档,你可以添加以下代码:
<activity android:name=".MyActivity" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="content" />
<data android:scheme="file" />
<data android:mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document" />
</intent-filter>
</activity>
这里,android:mimeType 属性指定了你可以处理的文件类型,这里是 application/vnd.openxmlformats-officedocument.wordprocessingml.document,表示 docx 格式的 Word 文档。
看起来都是好的,
以前版本的android上都能正确显示,
到新手机上就不行了
程序运行的分支不对,没有运行到修改后的代码。