Не найдено действия для обработки намерения: intent.action.PICK

#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 этим.