#android #audio #filepicker
#Android #Аудио #filepicker
Вопрос:
Как я могу устранить эту ошибку на Android 9.0. Когда я запускаю на Android 7 и ниже, ошибок нет
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.PICK dat=content://media/external/audio/media }
Вот метод
private void pickAudio() {
Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, PICK_AUDIO_REQUEST);
}
Комментарии:
1. Удалите второй параметр при создании вашего намерения. И установите тип mime.
Ответ №1:
Вы можете использовать try catch для перехвата исключения и отображения диалогового окна предупреждения? ** Примечание: я изменил имя вашего метода
private void pickAudioIntent() {
try{
Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, PICK_AUDIO_REQUEST);
}catch(Exception e){
//No activity? Display alert Dialog to user
}
Вы также можете заранее проверить, может ли какое-либо действие обработать намерение, выполнив следующие действия
public static boolean isIntentAvailable(Intent intent) {
final PackageManager mgr = mContext.getPackageManager();
List<ResolveInfo> list =
mgr.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
Это изменило бы pickAudioIntent() на :
private void pickAudioIntent() {
Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI);
if(isIntentAvailable(i)){
startActivityForResult(i, PICK_AUDIO_REQUEST);
return;
}
//Show Dialog to user as no intent available
}
Комментарии:
1. Я пробовал, и исключение ошибки — это отсутствие активности намерения, как я могу это сделать, чтобы заставить его работать
2. Какое значение
PICK_AUDIO_REQUEST
?3. 159, когда я меняю MediaStore. Аудио. Носитель к чему-то вроде MediaStore. Изображения. Медиа приложение не вылетает
Ответ №2:
Любой, кто сталкивается с этой проблемой на уровне API Android 30 или выше, одной из возможных причин могут быть изменения видимости пакета Android.
Вам нужно добавить
<queries>
<intent>
<action android:name="android.intent.action.PICK" />
<data android:mimeType="*/*" />
</intent>
</queries>
в ваш Manifest.xml
файл
Если проблема все еще сохраняется, это означает, что нет приложения для обработки этого запроса. Вам придется пойти с
try-catch
этим.