#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. Он вылетает с любым файлом, если я использую этот код.