Воспроизведение файла в Android MediaPlayer - PullRequest
3 голосов
/ 17 января 2012

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

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        if (resultCode == RESULT_OK) {
            if (requestCode == REQUEST_VIDEO_CAPTURED) {
                uriVideo = data.getData();
                Toast.makeText(VedioRecording.this, uriVideo.getPath(),
                        Toast.LENGTH_LONG).show();
            }
        } else if (resultCode == RESULT_CANCELED) {
            uriVideo = null;
            Toast.makeText(VedioRecording.this, "Cancelled!", Toast.LENGTH_LONG)
                    .show();
        }
        if (requestCode == 2) {
            selectedImageUri = data.getData();

            // OI FILE Manager
            filemanagerstring = selectedImageUri.getPath();

            // MEDIA GALLERY
            selectedImagePath = getPath(selectedImageUri);

            Intent intent1 = new Intent(android.provider.MediaStore.INTENT_ACTION_MUSIC_PLAYER).setData(selectedImageUri);

            startActivityForResult(intent1, 3);
//          videoviewPlay.setVideoURI(selectedImageUri);
//          videoviewPlay.start();
        }
        if (requestCode == 3) {

        }
    }


    private String getPath(Uri uri) {
        String[] projection = { MediaStore.Video.Media.DATA };
        Cursor cursor = managedQuery(uri, projection, null, null, null);
        if (cursor != null) {
            // HERE YOU WILL GET A NULLPOINTER IF CURSOR IS NULL
            // THIS CAN BE, IF YOU USED OI FILE MANAGER FOR PICKING THE MEDIA
            int column_index = cursor
                    .getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
            cursor.moveToFirst();
            return cursor.getString(column_index);
        } else {
            return null;
        }
    }
}

это мой код, я получаю активность, а не найденное исключение

Ответы [ 2 ]

4 голосов
/ 17 января 2012

Наиболее распространенный сценарий, в котором вы получаете исключение ActivityNotFound, - это когда вы пытаетесь запустить созданное вами действие, не объявляя его в манифесте.

Опубликовать код, который вы используете для запуска действия, вконечно.Если вы пытаетесь использовать действие, которое должно предоставляться платформой извне из вашего приложения, возможно, вы просто неправильно настраиваете Намерение

Обновление после отправленного кода ...

Ваш код, кажется, использует действие намерения INTENT_ACTION_MUSIC_PLAYER и передает URL-адрес изображения в качестве данных (это путь к изображению или ваши переменные просто неправильно названы?).Вы получаете ActivityNotFoundException, потому что в системе нет зарегистрированных получателей намерений для обработки этого сценария.Кроме того, если вы посмотрите на документацию по этой константе, вы увидите, что в какой-то момент они пометили ее как устаревшую:

http://developer.android.com/reference/android/provider/MediaStore.html#INTENT_ACTION_MUSIC_PLAYER

Я бы обычно использовал Intent.ACTION_VIEW и передавалТип MIME вместе с данными.Примерно так:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(pathToVideoFile), "video/*");
startActivity(intent);

Передав тип MIME "video / *" в setDataAndType, вы более конкретно относитесь к своему запросу к системе.

ЕслиВы хотите запросить систему, чтобы выяснить, можно ли обработать Намерение (это означает, что на устройстве пользователя, на котором запущен ваш код, зарегистрирована активность, которая может обработать Намерение), вы можете использовать метод PackageManager.queryIntentActivities:

queryIntentActivities

1 голос
/ 18 января 2012
String extension = MimeTypeMap
                        .getFileExtensionFromUrl(selectedImagePath);
                String mimeType = MimeTypeMap.getSingleton()
                        .getMimeTypeFromExtension(extension);
                Intent mediaIntent = new Intent(Intent.ACTION_VIEW);
                mediaIntent.setDataAndType(Uri.parse(selectedImagePath),
                        mimeType);
                startActivity(mediaIntent);

это код, который помог мне

...