最近调试代码的时候抛出了ActivityNotFoundException 的异常,因为以前的经验,首先想到的是去查看AndroidManifest中有没有什么不对的地方,后来找了半天发现是别的问题。顺便查了一下,网上抛出这个异常的情况还真是多种多样的,所以决定把自己遇到抛出此异常的情况记录下来。
PS:本人较懒,这里只记录我所遇到的问题。
1.设置PackageManager.COMPONENT_ENABLED_STATE_DISABLED后启动Acitivity抛ActivityNotFoundException
PackageManager pm;
ComponentName cName = new ComponentName(packgeName, activityName);
pm.setComponentEnabledSetting(cName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
这段代码是用于一个和USB热插拔相关的应用的,本意是在检测到USB拔出后通过PackageManager.setComponentEnabledSetting()将组建置为DISABLED,防止该组件在USB拔出后继续被使用。结果之后另一个线程想使用该组件,因此抛出异常ActivityNotFoundException。
解决方案:在该线程启用该组件前使用PackageManager.getComponentEnabledSetting(ComponentName cName)获取组件状态进行判断。