安装应用程序之前的文件不会出现

问题描述 投票:0回答:1

在我的代码中,我有一个 ListView,其中列出了手机上“文档”文件夹中的 pdf 文件,该文件夹在您创建文件时更新,但之前创建的文件不会出现,它们仍在文档文件夹中,并且我可以通过在手机上输入文件来看到它们,但它们不会从应用程序中出现。

这是我的代码:

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

    private var pdfFileNames = arrayOf<String>() // Lista de nombres de archivos PDF
    private lateinit var pdfAdapter: ArrayAdapter<String> // Adaptador para el ListView

    private lateinit var listView: ListView

    private val documentsDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS)

    @SuppressLint("MissingInflatedId")
    @Override
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        Log.d("MainActivity", "Iniciando la cámara")

        // CONFIGURAMOS VIEWBINDING
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        // Inicializa los elementos de la interfaz
        listView = binding.listaPdf


        // Inicializa el adaptador para el ListView
        pdfAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, pdfFileNames)
        listView.adapter = pdfAdapter


        listView.setOnItemClickListener { parent, view, position, id ->
            val selectedFileName = pdfFileNames[position] // Obtiene el nombre del archivo PDF seleccionado
            val selectedFile = File(documentsDirectory, selectedFileName) // Obtiene el archivo PDF correspondiente
            openPdf(selectedFile) // Abre el archivo PDF seleccionado
        }
    }

    override fun onResume() {
        super.onResume()
        loadPDFs()
    }

    
    //LISTA PDF   
    // Función para cargar los nombres de archivos PDF
    private fun loadPDFs() {
        if (documentsDirectory.exists() && documentsDirectory.isDirectory) {
            pdfFileNames = documentsDirectory
                .listFiles { file -> file.isFile && file.name.toLowerCase().endsWith(".pdf") }
                .map { it.name }
                .toTypedArray()

            if(pdfFileNames.isNotEmpty()){
                // Actualiza el adaptador del ListView
                pdfAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, pdfFileNames)
                listView.adapter = pdfAdapter
            }else{
                Toast.makeText(this, "No se encontraron archivos pdf en la carpeta Documentos",Toast.LENGTH_SHORT).show()
            }
        }
    }

        
    //PDF
    private fun openPdf(pdfFile: File) {
        val intent = Intent(this, VisorPDF::class.java)
        intent.putExtra("pdf_path", pdfFile.absolutePath)
        startActivity(intent)
    }

我尝试在

loadPDFs
onCreate
函数上调用函数
onResume
,但它不起作用

编辑1:我尝试添加一个日志来查看它在

"/Documents"
文件夹中检测到了多少个文件,它只计算新文件,总共 11 个(8 个来自以前的安装,3 个来自新安装创建的 pdf) )

android kotlin pdf mobile android-listview
1个回答
0
投票

您的应用程序只能看到

Documents/
中由此应用程序安装创建的文件。如果用户卸载并重新安装您的应用程序,您新安装的应用程序安装将无法看到之前安装的应用程序在
Documents/
中创建的文件。

使用

ACTION_OPEN_DOCUMENT
/
ActivityResultContracts.OpenDocument
可能会为您提供更好的服务,因为这允许用户访问
Documents/
和其他地方的所有内容。

© www.soinside.com 2019 - 2024. All rights reserved.