I'm trying to read files from a USB storage device connected to my Google Pixel. I'm currently using this method to select the path of the drive so I can query it for its contents
private static final String TAG = "MainActivity";
private static final int REQUEST_CHOOSE_DRIVE = 1;
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.text);
Intent i = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(i, REQUEST_CHOOSE_DRIVE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CHOOSE_DRIVE) {
Uri uri = data.getData();
}
}
However, the Uri looks something like /tree/... which doesn't seem to be a real path in the Android file system (verified via adb shell). How can I use this uri to query the contents of a portable storage device? I tried using the answer given here but the linked function returns null.
You are getting tree Uri. So you need to Add below code to get files from Tree Uri.
DocumentFile documentFile = DocumentFile.fromTreeUri(this, uri);
for (DocumentFile file : documentFile.listFiles()) {
if(file.isDirectory()){ // if it is sub directory
// Do stuff with sub directory
}else{
// Do stuff with normal file
}
Log.d("Uri->",file.getUri() + "\n");
}
For the query the contents, you can use below code.
ContentResolver contentResolver = getActivity().getContentResolver();
Uri docUri = DocumentsContract.buildDocumentUriUsingTree(uri,
DocumentsContract.getTreeDocumentId(uri));
Uri childrenUri = DocumentsContract.buildChildDocumentsUriUsingTree(uri,
DocumentsContract.getTreeDocumentId(uri));
Cursor docCursor = contentResolver.query(docUri, new String[]{
Document.COLUMN_DISPLAY_NAME, Document.COLUMN_MIME_TYPE}, null, null, null);
try {
while (docCursor.moveToNext()) {
Log.d(TAG, "found doc =" + docCursor.getString(0) + ", mime=" + docCursor
.getString(1));
}
} finally {
// close cursor
}
You can check Google sample code: https://github.com/googlesamples/android-DirectorySelection/blob/master/Application/src/main/java/com/example/android/directoryselection/DirectorySelectionFragment.java#L150
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With