没有找到处理意图的活动:intent.action.PICK

问题描述

如何在 android 9.0.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);
    }

解决方法

您可以使用 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:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...