在我的代码中,我有一个 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) )
您的应用程序只能看到
Documents/
中由此应用程序安装创建的文件。如果用户卸载并重新安装您的应用程序,您新安装的应用程序安装将无法看到之前安装的应用程序在 Documents/
中创建的文件。
使用
ACTION_OPEN_DOCUMENT
/ ActivityResultContracts.OpenDocument
可能会为您提供更好的服务,因为这允许用户访问 Documents/
和其他地方的所有内容。