it-swarm-id.com

Android pemilih file

Saya ingin membuat pengunggah file. Dan saya karenanya saya memerlukan pemilih file tetapi saya tidak ingin menulis ini sendiri. Saya menemukan manajer file OI dan saya pikir itu cocok untuk saya. Tetapi bagaimana saya bisa memaksa pengguna untuk menginstal file manager OI? Jika saya tidak bisa, apakah ada cara yang lebih baik untuk memasukkan file manager di aplikasi saya? Terima kasih

108
Bear

SUNTING ( 02 Jan 2012 ):

Saya membuat sumber terbuka kecil Android Proyek Perpustakaan yang merampingkan proses ini, sementara juga menyediakan file Explorer bawaan (dalam kasus 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 dalam sistem, Anda harus menyertakan manajer file Anda sendiri, atau menyarankan pengguna untuk mengunduh satu file. Saya percaya yang terbaik yang dapat Anda lakukan adalah mencari konten yang "dapat dibuka" di 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 Uri file yang dipilih 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);
}

Metode getPath() dalam FileUtils.Java saya adalah:

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;
} 
255
Paul Burke