Выберите файл с SD-карты с помощью Intent

Есть ли в Android способ просматривать и выбирать любой файл с SD-карты с помощью намерений?

Что-то типа:

String uri = (Environment.getExternalStorageDirectory()).getAbsolutePath();
Intent i = new Intent(Intent.ACTION_PICK, Uri.parse(uri));

Я пытаюсь отправить файл на другие устройства с помощью Bluetooth. Я могу отправить, если я укажу полный путь имени файла в своем коде. Я хочу, чтобы мои пользователи выбрали файл, который следует отправить.


person user2978042    schedule 02.04.2014    source источник


Ответы (2)


Вы можете использовать следующий код:

Intent mediaIntent = new Intent(Intent.ACTION_GET_CONTENT);
mediaIntent.setType("video/*"); // Set MIME type as per requirement
startActivityForResult(mediaIntent,REQUESTCODE_PICK_VIDEO);

Затем вы можете получить путь в onActivityResult:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUESTCODE_PICK_VIDEO
            && resultCode == Activity.RESULT_OK) {
        Uri videoUri = data.getData();
        Log.d("", "Video URI= " + videoUri);
    }
}
person Ketan Ahir    schedule 02.04.2014
comment
Если я устанавливаю mediaIntent.setType(video/*), открывается галерея для просмотра изображений и видео. Я хочу сделать общий поиск, где я должен выбрать любой файл. Это может быть музыкальный файл, файл apk и может быть что угодно. Является ли это возможным ? - person user2978042; 02.04.2014
comment
затем используйте setType(/) - person Ketan Ahir; 02.04.2014
comment
Но он говорит, что android.content.ActivityNotFoundException: не найдена активность для обработки Intent {act=android.intent.action.GET_CONTENT typ=/} - person user2978042; 02.04.2014
comment
используйте setType("*/*");, чтобы иметь возможность выбрать любой тип файла - person BeerBaron; 29.08.2014

Для общего просмотра используйте это (например, музыкальный файл):

Intent intent = new Intent();
intent.setType("*/*");
if (Build.VERSION.SDK_INT < 19) {
    intent.setAction(Intent.ACTION_GET_CONTENT);
    intent = Intent.createChooser(intent, "Select file");
} else {
    intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    String[] mimetypes = { "audio/*", "video/*" };
    intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
}
startActivityForResult(intent, Constants.REQUEST_BROWSE);

И получить просмотренные данные здесь:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == Constants.REQUEST_BROWSE
            && resultCode == Activity.RESULT_OK && data != null) {
        Uri uri = data.getData();
        if (uri != null) {
            // TODO: handle your case
        }
    }
}
person Deepti    schedule 30.04.2015