【问题标题】:Code to open a PDF file from within either the assets or raw folder when a button is pressed按下按钮时从资产或原始文件夹中打开 PDF 文件的代码
【发布时间】:2017-05-22 19:30:43
【问题描述】:

在 stackoverflow 上找到了很多与此问题相关的答案,但我无法成功实现其中任何一个。我猜这是因为人们发布了特定的代码,而我对 Java 的了解还不够多,无法修改它以适应我的应用程序。

我要的是打开保存在原始文件夹中的 PDF 文件所需的特定代码行(最初是资产文件夹,但这里的答案说资产文件夹中的项目被压缩并且 PDF 文件应该去到原始文件夹)。

从我收集到的其他答案中,首先需要将文件复制到内部存储中才能查看。这意味着赋予它读写存储权限。

这里的很多答案还向您展示了如何在应用程序中打开它(使用库或 WebView),或者在应用程序启动时自动打开它。我不想要这两种行为。我希望它通过意图在按钮单击时打开(因此它会通过设备上已有的第三方 PDF 查看器打开)。

我在 Android Studio 中创建了一个简单的应用,其中包含一个 Activity 和一个按钮。按下时它会显示祝酒词,所以我知道它已正确设置。我还在每个文件夹(资产和原始)中保存了一个 PDF 文件。请告诉我如何进行。

MainActivity.java:

public class MainActivity extends AppCompatActivity {

public void showPDF (View view) {

    Toast.makeText(MainActivity.this, "button pressed", Toast.LENGTH_LONG).show();

}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}}

activity_main.xml:

<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="showPDF"
    android:text="Button"
    tools:layout_editor_absoluteX="135dp"
    tools:layout_editor_absoluteY="171dp" />

请帮忙。我一直在寻找答案超过 4 天,但无济于事。

【问题讨论】:

    标签: java android pdf android-intent


    【解决方案1】:

    最初是 assets 文件夹,但这里的答案是 assets 文件夹中的项目被压缩,PDF 文件应该转到 raw 文件夹

    这通常不是问题。

    从我收集到的其他答案中,首先需要将文件复制到内部存储中才能查看。

    这是当今的惯例,假设您所说的内部存储是指what the Android SDK refers to as internal storage。然后,您将使用 FileProvider 使 PDF 可用于 PDF 查看器应用程序。

    我还在每个文件夹中保存了一个 PDF 文件(assets 和 raw)

    在Context 上使用getAssets().open(...)(例如Activity)以在资产上获得InputStream,其中... 是assets/ 内到PDF 的相对路径。因此,如果您的 PDF 在 assets/doc.pdf 中,请将 "doc.pdf" 传递给 open()。

    或者,在Context 上使用getResources().openRawResource() 以在您的原始资源上获得InputStream。

    然后将 PDF 复制到本地文件是:

    • 在所需位置创建File 对象(例如,new File(getFilesDir(), "doc.pdf")

    • 为该文件创建FileOutputStream

    • 使用标准 Java 文件 I/O 将字节从 InputStream 复制到 FileOutputStream

    然后,您可以配置 FileProvider(或子类)以从您保存 PDF 的任何位置提供 PDF,生成 Uri,并制作 ACTION_VIEW Intent 以打开 PDF 查看器。

    Here is a complete sample app 演示了所有这些,尽管我启动 PDF 查看器作为启动活动的一部分,而不是单击按钮。

    【讨论】:

    • 嘿。谢谢你的详细解释。不幸的是,我对 Java 真的很陌生,无法拼凑你给我的代码让它工作。在此之前,我能做的最多的就是在屏幕上显示一个图像,同时它会旋转很多次。如果不是太麻烦,你能写下实际的代码吗?我知道我在这里要求一些讲义,但我已经能够使用stackoverflow上的答案让一切正常运行。我只是绝对无法让它工作,我一直在寻找好几天。非常感谢您的帮助。
    【解决方案2】:

    有点晚了,但是这段代码的路径是原始的,你只能用这段代码访问 pdf 文件。

    希望对大家有所帮助

     private fun openPDFFile() {
        
                val intent = Intent("android.intent.action.GET_CONTENT")
                intent.type = "application/pdf"
                startActivityForResult(intent, OPERATION_CHOOSE_PDF)
            }
    

    【讨论】:

      猜你喜欢
      • 2014-08-25
      • 2018-11-27
      • 2013-12-06
      • 1970-01-01
      • 2018-12-17
      • 1970-01-01
      • 1970-01-01
      • 2010-12-28
      • 1970-01-01
      相关资源
      最近更新 更多