Java 按下按钮时从资产或原始文件夹中打开PDF文件的代码

Java 按下按钮时从资产或原始文件夹中打开PDF文件的代码,java,android,pdf,android-intent,Java,Android,Pdf,Android Intent,在stackoverflow上找到了很多与这个问题相关的答案,但我还没有成功地实现其中的任何一个。我猜这是因为人们发布特定的代码,而我对Java的了解还不够,无法对其进行修改以适应我的应用程序 我想要的是打开保存在原始文件夹中的PDF文件所需的特定代码行(最初是assets文件夹,但这里的答案是assets文件夹中的项目会被压缩,PDF文件应转到原始文件夹) 从我收集到的其他答案来看,首先需要将文件复制到内部存储器中才能查看。这意味着授予它读写存储权限 这里的许多答案还向您展示了如何在应用程序中

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

我想要的是打开保存在原始文件夹中的PDF文件所需的特定代码行(最初是assets文件夹,但这里的答案是assets文件夹中的项目会被压缩,PDF文件应转到原始文件夹)

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

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

我在Android Studio中创建了一个简单的应用程序,只需一个活动和一个按钮。当按下时,它会显示一个吐司,所以我知道它设置正确。我还在每个文件夹(资产和原始)中保存了一个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);
}}
活动\u 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天了,现在没有结果

最初是资产文件夹,但这里的答案是资产文件夹中的项目会被压缩,PDF文件应该转到原始文件夹

这通常不是问题

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

这是当今的惯例,假设您所说的内部存储是指。然后,您将使用
FileProvider
使PDF可供PDF查看器应用程序使用

我还在每个文件夹(资产和原始)中保存了一个PDF文件

使用
getAssets()。在
上下文
(例如,
活动
)上打开(…)
,以获取资产上的
输入流
,其中
资产
与PDF的相对路径。因此,如果您的PDF位于
assets/doc.PDF
中,请将
“doc.PDF”
传递到
open()

或者,在
上下文上使用
getResources().openRawResource()
在原始资源上获取
InputStream

将PDF复制到本地文件需要:

  • 在所需位置创建
    文件
    对象(例如
    新文件(getFilesDir(),“doc.pdf”)

  • 为该文件创建
    FileOutputStream

  • 使用标准Java文件I/O将字节从
    输入流
    复制到
    文件输出流

然后,您可以将
FileProvider
(或子类)配置为从保存PDF的任何位置为其提供服务,生成
Uri
,并创建
ACTION\u视图
Intent
,以打开PDF查看器


这说明了所有这一切,尽管我启动PDF viewer是启动活动的一部分,而不是单击按钮。

有点晚了,但是,此代码段的路径是原始的,您只能使用此代码访问PDF文件

我希望它能帮助一些人

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

嘿。谢谢你的详细解释。不幸的是,我对Java真的很陌生,不能把你给我的代码拼凑起来让它工作。在这之前,我能做的最多的就是在屏幕上显示一个图像,同时它会旋转很多次。如果不太麻烦的话,你能写下实际的代码吗?我知道我在要求一个这里有一点讲义,但我已经能够使用stackoverflow上的答案使所有事情都顺利进行。我完全无法让它工作,我已经找了好几天了。非常感谢您的帮助。