【问题标题】:How to open a PDF file from in-app browser?如何从应用内浏览器打开 PDF 文件?
【发布时间】:2015-10-02 11:24:03
【问题描述】:

我的应用程序中有一个基本的文件浏览器,我希望它能够打开 PDF 文件,但出于某种原因,即使我可以点击 PDF 文件并打开一秒钟,它们也会消失,我的电话给出了一个错误的 Toast 消息,而这个 Toast 我没有在我的代码中的任何地方编程。这很奇怪,因为从我的其他活动中打开相同的 PDF 文件没有任何问题。 (请参阅适用于我的 PDFManager 类的 OpenPDF() 方法)我研究了很多有关如何解决此问题的方法,但找不到明确的答案。感谢您的帮助!

toast 错误:无法显示 PDF(filename.pdf 无法打开)

OnListItemClick function from AndroidFileBrowser:

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        String filename = (String) getListAdapter().getItem(position);
        if (path.endsWith(File.separator)) {
            filename = path + filename;
        } else {
            filename = path + File.separator + filename;
        }
        pdf = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath() + "/PATH/" + filename);
        Uri path = Uri.fromFile(pdf);
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        intent.setDataAndType(path, "application/pdf");
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        try {
            startActivity(intent);
        } catch (ActivityNotFoundException e) {
        e.printStackTrace();
        }
    }

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.faraz.pdfreader"
          xmlns:android="http://schemas.android.com/apk/res/android">

    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>

    <application

        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
        >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <activity
            android:name=".SimpleScannerActivity"
            android:label="@string/simple_scanner_activity"
            android:theme="@style/AppOverlayTheme">
        </activity>
        <activity android:name=".PDFManager"/>
        <activity android:name=".AndroidFileBrowser"/>
                  <!--android:screenOrientation="portrait"-->
    </application>
</manifest>

我的 PDFManager 类中的 OpenPDF() 方法

    public void openPDF() {
        File pdf = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath() + "/PATH/" + pdfname + ".pdf");
        if (pdf.exists()) {
            Uri path = Uri.fromFile(pdf);
            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_VIEW);
            intent.setDataAndType(path, "application/pdf");
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            try {
                startActivity(intent);
            } catch (ActivityNotFoundException e) {
                Toast.makeText(PDFManager.this,
                        "No application available to view PDF!",
                        Toast.LENGTH_SHORT).show();
     /*                Intent intent = new Intent(Intent.ACTION_VIEW)
                        .setData(Uri.parse("http://docs.google.com/gview?embedded=true&url=" + url));
                startActivity(intent);
            }
     */
            }
        }
    }
 }

【问题讨论】:

  • 阅读此link
  • 这没有帮助。就像我说的,我环顾四周。我正在寻求帮助。另外,我的 PDF 甚至不在 assets 文件夹中。

标签: java android pdf android-intent browser


【解决方案1】:

在您的 OnItemClick() 中:

if (path.endsWith(File.separator)) 
{
    filename = path + filename;
} 
else 
{
    filename = path + File.separator + filename;
}

pdf = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath() + "/PATH/" + filename);
Uri path = Uri.fromFile(pdf);

您在初始化它之前使用“路径”,因此根据您的意图更改其中一个或另一个的名称,或者在您的 if 语句之前而不是之后声明它。

【讨论】:

  • 感谢您的解释!
猜你喜欢
  • 2021-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-04
  • 2018-11-04
  • 2017-01-20
  • 1970-01-01
相关资源
最近更新 更多