提问人:Hugo Jiménez 提问时间:10/25/2023 最后编辑:Hugo Jiménez 更新时间:10/26/2023 访问量:34
安装应用程序之前的文件不会显示
Files prior to the installation of the app do not appear
问:
在我的代码中,我有一个 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)
}
我试图在和函数上调用函数,但它不起作用loadPDFs
onCreate
onResume
编辑 1:我尝试添加日志以查看它在文件夹中检测到多少个文件,并且它只计算新文件,总共 11 个(8 个来自以前的安装,3 个来自新安装创建的 pdf)"/Documents"
编辑2:我已经检查了西班牙语手机是否将文件夹的名称更改为,但这并没有发生,并且新文件和旧文件具有相同的路径"/Documents"
"Documentos"
答:
0赞
CommonsWare
10/25/2023
#1
你的应用只能看到此应用安装创建的文件。如果用户卸载并重新安装您的应用,则新安装的应用安装将无法看到从您之前的应用安装中创建的文件。Documents/
Documents/
使用 / 可以更好地为您提供服务,因为这允许用户访问 和其他地方的所有内容。ACTION_OPEN_DOCUMENT
ActivityResultContracts.OpenDocument
Documents/
评论
0赞
Hugo Jiménez
10/25/2023
我该如何实现 / ?喜欢这个:?ACTION_OPEN_DOCUMENT
ActivityResultContracts.OpenDocument
launcher = registerForActivityResult(ActivityResultContracts.OpenMultipleDocuments())
0赞
Hugo Jiménez
10/25/2023
我试图在其中创建一个文件夹,看看是否是这样,但什么都没有,如果我将“旧”文件移动到那个新文件夹,它们仍然不会出现,只有新文件Documents
评论