Как открыть mp3-файл в приложении телефона по умолчанию?

#java #android #android-intent

Вопрос:

Мой код в данный момент выглядит так:

Когда пользователь нажимает на аудиофайл в моем файловом менеджере, он должен открыть его в своем аудиоприложении по умолчанию, но приложение файлового менеджера просто выходит из строя. Это также происходит с файлами apk и pdf, но я удалил их из кода, чтобы сосредоточиться на проблеме mp3.

Кроме того, если кто-нибудь знает универсальный способ открывать файлы без указания расширения, это было бы потрясающе!

Заранее спасибо, друзья мои.

 Intent intent = new Intent();
                            intent.setAction(Intent.ACTION_VIEW);
                            if (files[position].toString().contains(".png") || files[position].toString().contains(".jpg") || files[position].toString().contains(".jpeg")) {
                                intent.setDataAndType(Uri.parse(files[position].toString()), "image/jpeg");
                            } else if (files[position].toString().contains(".mp4")) {
                                intent.setDataAndType(Uri.parse(files[position].toString()), "video/*");
                            } else if (files[position].toString().contains(".mp3")) {
                                intent.setDataAndType(Uri.parse(files[position].toString()), "audio/*");
                            } else if (files[position].toString().contains(".doc") || files[position].toString().contains(".docx")) {
                                intent.setDataAndType(Uri.parse(files[position].toString()), "application/msword");
                            } else {
                                intent.setDataAndType(Uri.parse(files[position].toString()), "*/*");
                            }
                            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            startActivity(intent);
 

Ответ №1:

Вы можете использовать намерение, подобное этому,

 Intent intent = new Intent();  
intent.setAction(android.content.Intent.ACTION_VIEW);  
intent.setDataAndType(Uri.fromFile(new File(path)), "audio/*");  
startActivity(intent); 

Комментарии:

1. Приложение продолжает сбоить, как только я пытаюсь открыть mp3-файл, даже с этим кодом.

Ответ №2:

Я не понимаю, что вы сделали в коде, но если у вас есть uri для mp3-файла, просто используйте intent.

 Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
 

редактировать: Я проверил свою кодовую базу для такого использования, я открыл файл txt для импорта. Установка типа всегда приводила к сбою приложения для меня, поэтому я установил тип «* /*». См.Ниже аналогичный код, который работает.

 public void importDictionary() {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*"); //needed to not make it crash
startActivityForResult(intent, 2);
}
 

Переопределите значение onActivityResult для последующего действия

 @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 2 amp;amp; resultCode == Activity.RESULT_OK) {
    // your code here
    }
}
 

Комментарии:

1. Он вылетает с любым файлом, если я использую этот код.