安装应用程序之前的文件不会显示

Files prior to the installation of the app do not appear

提问人:Hugo Jiménez 提问时间:10/25/2023 最后编辑:Hugo Jiménez 更新时间:10/26/2023 访问量:34

问:

在我的代码中,我有一个 ListView,它列出了手机上“文档”文件夹中的 pdf 文件,当您创建一个文件时会更新,但之前创建的 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)
    }

我试图在和函数上调用函数,但它不起作用loadPDFsonCreateonResume

编辑 1:我尝试添加日志以查看它在文件夹中检测到多少个文件,并且它只计算新文件,总共 11 个(8 个来自以前的安装,3 个来自新安装创建的 pdf)"/Documents"

编辑2:我已经检查了西班牙语手机是否将文件夹的名称更改为,但这并没有发生,并且新文件和旧文件具有相同的路径"/Documents""Documentos"

Android Kotlin PDF 移动版 android-listview

评论


答:

0赞 CommonsWare 10/25/2023 #1

你的应用只能看到此应用安装创建的文件。如果用户卸载并重新安装您的应用,则新安装的应用安装将无法看到从您之前的应用安装中创建的文件。Documents/Documents/

使用 / 可以更好地为您提供服务,因为这允许用户访问 和其他地方的所有内容。ACTION_OPEN_DOCUMENTActivityResultContracts.OpenDocumentDocuments/

评论

0赞 Hugo Jiménez 10/25/2023
我该如何实现 / ?喜欢这个:?ACTION_OPEN_DOCUMENTActivityResultContracts.OpenDocumentlauncher = registerForActivityResult(ActivityResultContracts.OpenMultipleDocuments())
0赞 Hugo Jiménez 10/25/2023
我试图在其中创建一个文件夹,看看是否是这样,但什么都没有,如果我将“旧”文件移动到那个新文件夹,它们仍然不会出现,只有新文件Documents
0赞 CommonsWare 10/31/2023
@HugoJiménez:“它们仍然没有出现,只有新的”——正确。“我该如何实现”——请参阅文档我的这本免费书籍的这一章,以及许多在线博客文章等。