DÜZENLEME ( 02 Ocak 2012 ):
Bu süreci düzene sokan ve aynı zamanda yerleşik bir dosya gezgini sağlayan küçük bir açık kaynak Android Kitaplık Projesi oluşturdum (kullanıcının mevcut olmaması durumunda). Yalnızca birkaç satır kod gerektiren kullanımı son derece basittir.
Bunu GitHub: aFileChooser'da bulabilirsiniz .
ORİJİNAL
Kullanıcının sistemdeki herhangi bir dosyayı seçebilmesini istiyorsanız, kendi dosya yöneticinizi eklemeniz veya kullanıcıya bir dosyayı indirmesini önermeniz gerekir. Yapabileceğinizin en iyisinin şuna Intent.createChooser()
benzer bir "açılabilir" içerik aramak olduğuna inanıyorum :
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();
}
}
Seçili dosya var için Ardından dinleyeceğini Uri
de onActivityResult()
şöyle:
@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);
}
getPath()
Benim yöntem FileUtils.java
geçerli:
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;
}