【问题标题】:About opening .PDF in an Android App (locally stored)关于在 Android 应用中打开 .PDF(本地存储)
【发布时间】:2012-03-24 12:41:36
【问题描述】:

所以我的应用中有这些按钮,一旦按下,我想从应用中打开 .PDF 文件。

我已将文件存储在 /res/raw 目录中。我们称它们为 file1.PDF、file2.PDF 等。

public void onClick(View v) {
    switch (v.getId()) {
    case R.id.file1:
    Log.i(TAG, "Button one pressed");
    openPDF(Uri.parse("android:resource://test.pdf.files/raw/res/file1.PDF"));
        break;
}}

以上是我的 onClick 代码。下面是openPDF函数的代码。

public void openPDF(Uri url)
{
    File file = new File(url.toString());
    Log.i(TAG, url.toString());
    if (file.exists())
    { 
        Log.i(TAG, "File exists"); 
        Intent intent = new Intent();
         intent.setAction(android.content.Intent.ACTION_VIEW);
         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         intent.setDataAndType(Uri.fromFile(file), "application/pdf");
         try
         {
              getApplicationContext().startActivity(intent); 
         }
         catch (ActivityNotFoundException e) 
         {
             Log.e(TAG,"Activity not found exception");
         }
    }else{
        Log.i(TAG,"404: File not found!");
    }
}

我的问题如下,我永远无法通过 if (file.exists()) 检查。我试过让文件文件同时接受 Uri、URI 和字符串,我也或多或少尝试了文件路径的每个变体,比如“res/raw/file1.PDF”、“raw/file.PDF”、“test .pdf.files/raw/res/file1.PDF”。但在任何这些情况下,我都找不到我想打开的文件,谁能明白为什么这不起作用?

我已经尝试解决这个问题好几个小时了,但我似乎无法解决这个问题。

【问题讨论】:

    标签: android string file pdf uri


    【解决方案1】:

    我永远无法通过 if (file.exists()) 检查

    当然。您的 Uri 不指向文件。您的 Uri 指向一个资源。资源不是文件。文件不是资源。

    您可以尝试startActivity()Intent 一起使用您的资源Uri。如果您发现 PDF 查看器拒绝使用该 Uri,您需要将资源复制到本地世界可读文件(例如,在外部存储上)并将该副本与 @987654327 一起使用@ 启动您的 PDF 查看器。

    【讨论】:

    • 嗯,我现在也尝试了一种全新的方法。我没有使用 uri 发送,而是简单地从 1-4 发送一个 int。在 openPDF 方法中,我放置了一个开关,上面写着: switch (fileNumber) { case 1: File file = new File ("android:resource://test.file.pdf/res/raw/file1.PDF");休息; .... } 这是否因为与第一个相同的原因而不起作用?因为我仍然找不到我的文件。
    • @TomErikHøvring:请重新阅读我的回答。 资源不是文件
    • 对不起,我一定是误会了。我想通过删除 Uri 中间部分我可以直接打开一个文件。
    • @TomErikHøvring:我只能多次说“资源不是文件”。您不能在 android.resource Uri 值上使用 File 对象。那是因为资源不是文件。删除您的 File 对象和 exists() 检查,因为它们完全没用——如果资源不存在,则 应用程序 不存在,并且您的 代码不在这里。如果您的代码存在,那么资源也存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    • 2018-03-03
    • 1970-01-01
    • 2023-04-02
    • 2012-04-24
    • 2017-01-05
    • 1970-01-01
    相关资源
    最近更新 更多