BEARBEITEN ( 02. Januar 2012 ):
Ich habe ein kleines Open-Source-Android-Bibliotheksprojekt erstellt, das diesen Prozess rationalisiert und gleichzeitig einen integrierten Datei-Explorer bereitstellt (falls der Benutzer keinen hat). Es ist extrem einfach zu bedienen und erfordert nur wenige Codezeilen.
Sie finden es bei GitHub: aFileChooser .
ORIGINAL
Wenn Sie möchten, dass der Benutzer eine beliebige Datei im System auswählen kann, müssen Sie Ihren eigenen Dateimanager hinzufügen oder dem Benutzer empfehlen, eine herunterzuladen. Ich glaube, das Beste, was Sie tun können, ist, nach "zu öffnenden" Inhalten zu suchen Intent.createChooser()
:
private static final int FILE_SELECT_CODE = 0;
private void showFileChooser() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);
try {
startActivityForResult(
Intent.createChooser(intent, "Select a File to Upload"),
FILE_SELECT_CODE);
} catch (android.content.ActivityNotFoundException ex) {
// Potentially direct the user to the Market with a Dialog
Toast.makeText(this, "Please install a File Manager.",
Toast.LENGTH_SHORT).show();
}
}
Sie würden dann hören Sie auf die ausgewählte Datei ist Uri
in onActivityResult()
etwa so:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case FILE_SELECT_CODE:
if (resultCode == RESULT_OK) {
// Get the Uri of the selected file
Uri uri = data.getData();
Log.d(TAG, "File Uri: " + uri.toString());
// Get the path
String path = FileUtils.getPath(this, uri);
Log.d(TAG, "File Path: " + path);
// Get the file instance
// File file = new File(path);
// Initiate the upload
}
break;
}
super.onActivityResult(requestCode, resultCode, data);
}
Die getPath()
Methode in meinem FileUtils.java
ist:
public static String getPath(Context context, Uri uri) throws URISyntaxException {
if ("content".equalsIgnoreCase(uri.getScheme())) {
String[] projection = { "_data" };
Cursor cursor = null;
try {
cursor = context.getContentResolver().query(uri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow("_data");
if (cursor.moveToFirst()) {
return cursor.getString(column_index);
}
} catch (Exception e) {
// Eat it
}
}
else if ("file".equalsIgnoreCase(uri.getScheme())) {
return uri.getPath();
}
return null;
}