如何从资产子文件夹中读取 PDF 文件

How to read PDF files from assets subfolder

我正在开发一个教育应用程序,其中包含多个 PDF 文件形式的试卷 PDF 文件放置在 Assets 子文件夹中并以列表视图显示。到这里我的代码工作正常。但是当我点击列表项时,PDF 文件没有显示,显示错误 PDF 文件无法打开(路径错误)

提前致谢!

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.pdfviewinfo);

     AssetManager asset = getAssets();
        try {
            final String[] arrdata = asset.list("pdffolder");
            List<String> pdflist = new ArrayList<String>();
            int size = arrdata.length;
            for(int i = 0;i<size;i++)
            {
              if(arrdata[i].contains(".pdf"))
              {
                pdflist.add(arrdata[i]); 
               }
            }
            ArrayAdapter<String> adapter= new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,pdflist);
            ListView listView = (ListView) findViewById(R.id.listView1);
            listView.setAdapter(adapter);
                    listView.setOnItemClickListener(new OnItemClickListener() {

            @Override
             public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                 valueinfo = (String)parent.getItemAtPosition(position); 
                 File file = new File("file:///android_asset/pdffolder/"+valueinfo);
              Log.i("testing", ""+file);
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent.setDataAndType(Uri.fromFile(file),"application/pdf");
                    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(intent);
            }
        });
    } catch (IOException e) {

        e.printStackTrace();
    }

     }
 }

当您将 PDF 文件保存在资产文件夹中时,Adobe Reader 将无法识别该路径。通常将 PDF 保存在您的资产文件夹中时,它将在您的 APK 中可用,而不是在您的外部存储中可用,因此 Adob​​e reader 将无法识别该路径。它应该保存在外部路径中才能打开它。

将文件从 assets 文件夹复制到应用程序私有内存(以便文件受到保护)并使用文件提供程序授予对 pdfs 文件的访问权限,以便 pdf reader 外部应用程序可以显示 pdf 内容. https://developer.android.com/training/secure-file-sharing/setup-sharing.html