EDIT ( 02 Jan 2012 ):
Saya membuat Proyek Perpustakaan Android open source kecil yang menyederhanakan proses ini, sambil juga menyediakan penjelajah file bawaan (jika pengguna tidak memiliki satu hadiah). Ini sangat mudah digunakan, hanya membutuhkan beberapa baris kode.
Anda dapat menemukannya di GitHub: aFileChooser .
ASLI
Jika Anda ingin pengguna dapat memilih file apa pun di sistem, Anda perlu menyertakan pengelola file Anda sendiri, atau menyarankan pengguna untuk mendownloadnya. Saya yakin hal terbaik yang dapat Anda lakukan adalah mencari konten yang "dapat dibuka" dengan cara Intent.createChooser()
seperti ini:
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();
}
}
Anda kemudian akan mendengarkan file yang dipilih adalah Uri
di onActivityResult()
seperti:
@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);
}
The getPath()
metode dalam saya FileUtils.java
yaitu:
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;
}