在 Android 中打开 pdf 时出现问题:文件路径无效

2023-12-06

我需要从我的 Android 应用程序打开一个 pdf 文件。我将 pdf 保存在应用程序包文件夹(/data/data/com.app.example/files)中。我已经在 android 模拟器中安装了 adobe reader 应用程序。问题是,当我尝试使用 adobe reader 打开 pdf 文件时,模拟器会显示下一条消息:文件路径无效。

我不知道为什么会发生这种情况,但我坚持这一点。该文件已正确保存,因为我可以在我的计算机中打开它。

这是代码:

HttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet(url);
        try {
            HttpResponse response = client.execute(request);
            request(response, file_name);

            File file = new File("data/data/com.app.example/files/"+file_name);

            PackageManager packageManager = getPackageManager();
            Intent testIntent = new Intent(Intent.ACTION_VIEW);
            testIntent.setType("application/pdf");
            List list = packageManager.queryIntentActivities(testIntent, PackageManager.MATCH_DEFAULT_ONLY);
            if(file.exists())
            {
                  if (list.size() > 0 && file.isFile()) {
                        Intent intent = new Intent();
                        intent.setAction(Intent.ACTION_VIEW);
                        Uri uri = Uri.fromFile(file);
                        intent.setDataAndType(uri, "application/pdf");
                        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);     

                        startActivity(intent);
                  }else
                  {
                        System.out.println("NO APPs TO OPEN PDFs.");
                  }
            }
            else
            {
                  System.out.println("FILE DOES NOT EXIST.");
            }           
        }catch(Exception ex){
            System.out.println("Failed!");
            ex.printStackTrace();
        }


public String request(HttpResponse response, String file){
        String result = "";
        try{
            InputStream in = response.getEntity().getContent();
            FileOutputStream f = openFileOutput(file, MODE_WORLD_WRITEABLE);
            byte[] buffer = new byte[in.toString().length()];
            int len1 = 0;
            int counter = 0;
            while ((len1 = in.read(buffer)) > 0) {
                f.write(buffer, 0, len1);
                counter++;
            }
            f.close();
        }
        catch(Exception ex){
            result = "Error";
        }
        return result;
    }

提前致谢。

问候,哈维。


这是因为 PDF 文件驻留在您自己的包中,并且 Adob​​e reader 试图从您的包中访问 PDF 文件,这对于 Android 应用程序开发是不允许的。

您可以尝试将文件保存到SDCARD上然后打开它

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Android 中打开 pdf 时出现问题:文件路径无效 的相关文章

随机推荐

  • ASP.NET:为什么身份验证超时后 FormsAuthenticationTicket 为空?

    我正在根据我之前的问题和答案实现身份验证超时检测机 制here 我已经实现了一个 HTTP 模块 该模块使用 AuthenticateRequest 事件来运行代码来捕获身份验证期限是否已过期 执行此操作的代码如下 public class
  • Python - 是否可以在 Discord.py-v1.0 中 wait_for 一个或另一个事件?

    有没有可以用的wait for以这样的方式 它将等待reaction add or reaction remove 我见过有on reaction add and on reaction remove功能 但我想要一种没有这些功能的方法 我
  • 在android中将音频注入语音流

    我有一个想法 为愚蠢的人构建一个 Android 应用程序 可以帮助他们接听电话 我想将文本转换为语音 然后通过通话流传输 在android平台上 仍然无法播放音频以便对方在通话过程中听到吗 抱歉 简短的回答似乎仍然是否定的 我很乐意在这一
  • 将 Visual Studio Code 连接到远程 Mysql 数据库

    我知道这应该更加集中 但我为此浪费了一整天的时间 我无法弄清楚 我正在尝试使用任何可用的 VS Code 扩展连接到远程 MySQL 数据库 我尝试使用SQLTools with MySQL MariaDB 插件 适用于 VS Code 的
  • mysql 按计数排序性能

    我发现以下内容有点令人困惑 如果我执行以下查询 当按索引值 关键字 排序时 需要 0 0008 秒 但当按 计数 排序时 需要 3 秒以上 以下过程大约需要 0 0008 秒 SELECT keyword COUNT DISTINCT pm
  • 计算行总和的平均值,无需在 Excel 中创建新列

    这是我的矩阵的示例 A B C D E 1 0 0 1 1 0 0 0 0 0 0 0 1 1 0 0 2 1 您可以将每一行视为受访者 将每一列视为调查问卷上的一个项目 我的目标是取每行总和的平均值 即每个受访者的总分 无需创建新列并考虑
  • 如何让一件物品在另一件物品开始收缩之前完全收缩?

    我试图创建一个随着视口变小而消失的边距 同时主要内容尽可能长时间地保持相同的大小 该边距应该有最大尺寸 因此使用auto是不可能的 换句话说 我的问题是如何控制网站上不同项目的收缩优先级 Flexbox 模型允许设置ratio收缩 但不是收
  • 如何迭代 DOM 树?

    我正在开发一个使用树结构的网站 其方式如下 创建一个列表 如果该列表的元素本身就是一个列表 则使用appendChild将其附加到第一个列表 大列表放在一个名为 tree 的 div 中 我想访问 div 树 的内容并通过节点来显示它们 我
  • zend框架中的密码确认

    我将此类添加到library My Validate Password Confirmation php
  • 将属性添加到现有类

    我有一个私有类 用于实现某些属性 因此 我没有能力修改实际的私有类 并且不想使用继承来创建我自己的类来代替它 有没有办法向该私有类添加属性 Thanks 如果您可以访问所需类中的数据 并且可以使用方法而不是属性 请查看扩展方法 在 C 3
  • Python 的多种字符串格式化方式 — 旧的方式是否(将要)被弃用?

    Python 至少有六种格式化字符串的方法 In 1 world Earth method 1a In 2 Hello s world Out 2 Hello Earth method 1b In 3 Hello planet s plan
  • 使用 GoolgeProvider 的 NextAuth 不会在会话回调中返回用户

    突然我无法再访问注册用户的电子邮件地址 我使用 NextAuth 和 Google 作为提供商 到目前为止 一切顺利 实际上 注册成功后 用户的电子邮件应该是由Google 发送的 在 MongoDB 数据库中 用户表照常创建 用户和电子邮
  • 登录后重定向 laravel 7 [重复]

    这个问题在这里已经有答案了 我想在登录后将用户重定向到 details 但它将我重定向到 home 登录控制器 php public function authenticate Request request credentials req
  • 对 JSON 键进行排序并与匹配值合并

    我的 JSON 看起来像这样 json type big date 2012 12 08 qty 6 type small date 2012 12 08 qty 9 type big date 2012 12 15 qty 4 type
  • O(N) 中直到 N 为止的数字的约数计数?

    因此 我们可以使用 sieve 在 O NlogN 算法中计算从 1 到 N 的每个数字的约数 int n cin gt gt n for int i 1 i lt n i for int j i j lt n j i cnt j here
  • CMake将不同子目录中的静态库链接到一个静态库

    我使用CMake构建了一个由多个嵌套静态库组成的项目 下图显示了类似但简单的结构 TestProject CMakeLists txt Main cpp level2 level2 cpp level2 h CMakeLists txt l
  • 需求.txt 与 setup.py

    我开始使用 Python 我已经添加requirements txt and setup py到我的项目 但是 我仍然对这两个文件的用途感到困惑 我读过setup py是为可重新分发的东西而设计的requirements txt是为不可再分
  • 用 C++ 以编程方式打开文档

    我有一个用 C 编写的控制台程序 现在 每当程序用户在控制台中输入 手册 时 我想打开一个手册文档 txt 或 pdf 格式 我怎样才能做到这一点 任何教程的链接都会有帮助 谢谢 尝试编译这段代码 Open cpp to Open exe然
  • 使用递归查找所有索引

    我必须编写一个程序来查找列表或字符串中特定元素的所有索引值 我have to使用递归 我的函数只能接受两个参数 我的问题是我的程序只找到第一个索引然后停止 我该如何更改它以满足我的要求 My code def find all L v re
  • 在 Android 中打开 pdf 时出现问题:文件路径无效

    我需要从我的 Android 应用程序打开一个 pdf 文件 我将 pdf 保存在应用程序包文件夹 data data com app example files 中 我已经在 android 模拟器中安装了 adobe reader 应用