【问题标题】:No Activity found to handle Intent: intent.action.PICK未找到处理 Intent 的 Activity:intent.action.PICK
【发布时间】:2021-02-22 08:48:32
【问题描述】:

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

【问题讨论】:

  • 在创建意图时删除第二个参数。并设置一个 mime 类型。

标签: android audio filepicker


【解决方案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
    }

【讨论】:

  • 我已经尝试过,错误异常是没有可用的意图活动,我该如何锻炼以使其正常工作
  • PICK_AUDIO_REQUEST 的值是多少?
  • 159,当我将 MediaStore.Audio.Media 更改为类似 MediaStore.Images.Media 时,应用程序不会崩溃
【解决方案2】:

任何人在 Android API 级别 30 或更高版本上遇到此问题,可能的原因之一可能是 Android Package Visibility 更改。

你需要添加

<queries>
    <intent>
        <action android:name="android.intent.action.PICK" />
        <data android:mimeType="*/*" />
    </intent>
</queries>

到您的Manifest.xml 文件

如果问题仍然存在,则表示没有应用程序可以处理该请求。那你就得用try-catch了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    • 2014-01-29
    相关资源
    最近更新 更多