我已经从外部存储中提取了所有PDF文件,并在我的应用程序回收视图中显示它们,但现在我有问题,我想从一些特定的文件夹中提取所有PDF文件,并在我的应用程序的回收视图中显示它们,有没有可能的方法从特定的目录中提取?
这个功能将完全罚款和提取所有文件从存储,但我不想提取所有从外部存储我想这样做从一些特定的目录这个功能将给予我的所有pdf文件在我的外部存储列表我想在这个功能中做一些改变,但我不知道如何?
/**
* reading SD card from this function
*
*/
private List<PdfModel> ReadSDcard()
{
List<PdfModel> myList = new ArrayList<>();
String[] projection = {MediaStore.Files.FileColumns.DATA,
MediaStore.Files.FileColumns.DATE_ADDED,
MediaStore.Files.FileColumns.DISPLAY_NAME,
MediaStore.Files.FileColumns.MIME_TYPE,
MediaStore.Files.FileColumns.DATE_MODIFIED
};
final String selection = MediaStore.Files.FileColumns.MIME_TYPE +" = ?";
String pdf = MimeTypeMap.getSingleton().getMimeTypeFromExtension("pdf");
String[] selectionArgs = new String[]{pdf};
Uri collection;
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.Q)
{
// collection = MediaStore.Downloads.getContentUri("external");
collection = MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY);
// collection = MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL+"/"+"Abbas_1122");
Log.e(TAG, "ReadSDcard: path______________________________________________"+collection );
myList.addAll( getListOfPdfFiles(collection, projection, selection, selectionArgs));
}
else
{
// collection = MediaStore.Files.getContentUri(Environment.getExternalStorageDirectory().getAbsolutePath()+"/myFolder_1122/"); _________"myFolder_1122" this is the folder which i have created
// collection = MediaStore.Files.getContentUri("external");//this will work for fetching all files from external below API level 30
collection = MediaStore.Files.getContentUri("//media//storage/emulated/0/Abbas_1122/");//this will work for fetching all files from external below API level 30
Log.e(TAG, "ReadSDcard: path ______________________________________________ "+collection );
Toast.makeText(this, "collection: "+collection.toString(), Toast.LENGTH_SHORT).show();
myList.addAll( getListOfPdfFiles(collection, projection, selection, selectionArgs));
}
return myList;
}
private List<PdfModel> getListOfPdfFiles(Uri collection, String[] projection, String selection, String[] selectArgs)
{
List<PdfModel> pdfList = new ArrayList<>();
try {
Cursor cursor = getApplicationContext().getContentResolver().query(collection, projection,selection, selectArgs,null);
if (cursor.moveToFirst())
{
int columIndex = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATA);
do {
try {
File file = new File(cursor.getString(columIndex));
String fileName = file.getName();
PdfModel pdfModel = new PdfModel(fileName, "129", 0, "pdf", file.getPath());
pdfList.add(pdfModel);
}
catch (Exception e)
{
e.printStackTrace();
}
}while (cursor.moveToNext());
}
cursor.close();
}catch (Exception e)
{
e.printStackTrace();
}
return pdfList;
}
1条答案
按热度按时间zzwlnbp81#
我已经解决了这个问题这是非常容易的,但我不知道为什么我的头脑是不是工作上...首先你必须问一个权限从用户,如读取和写入外部存储,也要问管理外部存储,也要添加在manifist应用程序部分,你必须添加这一行...
如果用户已赠款权限,则以下功能将为您提供pdf文件列表
在这个问题中,我一直试图使用内容解析器获取特定的文件夹,以获取或检索他们的文件,并在我的应用程序回收视图中显示它们...但我失败了,所以这个方法是工作之前的API级别30或之后的API级别30...但请确保您已被授予权限特别感谢@blackapps采取interst和回复我来解决我的问题