Воспроизведение файла в Android MediaPlayer
Я хочу воспроизвести видеофайл, записанный для воспроизведения в медиаплеере 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;
}
}
}
это мой код, я получаю активность notfound исключение
2 ответа
Наиболее распространенный сценарий, в котором вы получаете исключение ActivityNotFound, - это когда вы пытаетесь запустить созданное вами действие, не объявляя его в манифесте.
Опубликуйте свой код, который вы используете для запуска Activity, чтобы быть уверенным. Если вы пытаетесь использовать действие, которое должно предоставляться платформой извне из вашего приложения, возможно, вы просто неправильно настраиваете Intent
Обновление после кода отправлено...
Ваш код, кажется, использует действие намерения INTENT_ACTION_MUSIC_PLAYER и передает URL-адрес изображения в качестве данных (это путь к изображению или ваши переменные просто неправильно названы?). Вы получаете ActivityNotFoundException, потому что в системе нет зарегистрированных получателей намерений для обработки этого сценария. Кроме того, если вы посмотрите на документацию по этой константе, то увидите, что в какой-то момент они пометили ее как устаревшую:
http://developer.android.com/reference/android/provider/MediaStore.html
Я бы обычно использовал Intent.ACTION_VIEW и передавал тип mime вместе с данными. Что-то вроде следующего...
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(pathToVideoFile), "video/*");
startActivity(intent);
Передав mime-тип "video/*" в setDataAndType, вы более конкретно относитесь к своему запросу к системе.
Если вы хотите сделать запрос в системе, чтобы выяснить, можно ли обработать намерение (это означает, что на устройстве пользователя, на котором запущен ваш код, зарегистрировано действие, которое может обработать намерение), вы можете использовать метод PackageManager.queryIntentActivities:
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);
это код, который помог мне