背景
我创建了一个需要获取其他应用程序支持的意图信息的应用程序(例如,为了在桌面上创建快捷方式)。
问题
我正在使用下一个简单的代码,它在我测试过的 99% 的应用程序上运行良好:
final Intent mainIntent=new Intent();
mainIntent.setPackage(packageName);
final List<ResolveInfo> resolveInfos=getPackageManager().queryIntentActivities(mainIntent,0);
问题在于,在某些应用程序上(例如这个程序包名称为 "com.mxtech.videoplayer.ad" 的应用程序),它会导致 nullPointerException(在代码的最后一行)。
顺便说一句,我没有添加额外过滤标志的原因是因为我确实想获得所有可能的标志,然后向用户展示一个选择——要么使用默认标志,要么尝试其他可能效果不佳的标志。
我试过的
尽管我编写的代码适用于各种应用程序,但我尝试添加一些标志,例如:
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
或者:
final List<ResolveInfo> resolveInfos=getPackageManager().queryIntentActivities(mainIntent,PackageManager.MATCH_DEFAULT_ONLY);
或两者。
问题
为什么我只为这个应用程序获得这个异常,我该如何修复它并获得我可以启动它的所有受支持的意图?
当然,我可以添加两种获取意图的方法(使用 try-catch),但也许有一种更“正确”的方法可以做到这一点。
我知道我可以将操作添加到 "Intent.ACTION_MAIN" 的意图中,但这也消除了许多我希望获得的可能意图。