首页 新闻 会员 周边

Intent.ACTION_VIEW 弹出的应用选择框 没有包括所有的应用

0
悬赏园豆:100 [已解决问题] 解决于 2023-05-30 16:25

我有一个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)

z0zhu的主页 z0zhu | 初学一级 | 园豆:114
提问于:2023-05-29 10:29
< >
分享
最佳答案
0

可能是因为你的应用没有正确地注册 FileProvider,导致系统无法识别你的应用能够处理哪些类型的文件。以下是一些常见的问题以及解决方法:

  1. 检查 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,它们分别代表了手机外部存储、应用内部文件和应用内部缓存等三种类型的路径。你需要根据你的具体情况来定义这些路径。

  1. 确保你的应用具有读写文件的权限

在 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 是一个自定义的请求码,用于标识你所请求的权限。

  1. 确保你的应用可以处理相应的文件类型

在你的应用的 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 文档。

收获园豆:100
lanedm | 老鸟四级 |园豆:2378 | 2023-05-29 10:58

看起来都是好的,
以前版本的android上都能正确显示,
到新手机上就不行了

z0zhu | 园豆:114 (初学一级) | 2023-05-29 14:49
其他回答(1)
0

程序运行的分支不对,没有运行到修改后的代码。

z0zhu | 园豆:114 (初学一级) | 2023-05-30 16:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册