昨天刚刚收到了第一台Android平板设备——Galaxy tab 10.1,第一次全面的在Android 3.x上调试各种代码。
第一组程序就遇到了问题,这组APP的工作是通过Broadcast来协作的,当一个APP启动时,它会sendBroadcast来告诉其他应用,在Android 2.3.x和之前的版本一直工作正常,到3.1上这些BroadcastReceiver就开始淡定的不行,不论我怎么大声广播都没反应TOT
又是没日没夜的调试,想过了各种的可能,还是不成。最后又是Google这个麻烦的制造者帮我找到了这么一组讨论,问题自然就明了了:从Android 3.1开始,为了安全考虑,任何刚刚安装的程序都不会主动运行,除非用户启动过一次。
讨论中给出的解决方案对我的情况还是不靠谱,毕竟这组应用都没有Launcher Activity,都是在收到特定的Broadcast时才开始工作的。不过知道了问题所在,解决的办法就有了。
for (App a : apps) {
Intent i = new Itent("ACTION_NAME");
i.setComponentName(a.packageName, a.receiverClassName);
sendBroadcast(i);
}
虽然很简单的就能解决我的问题,不过折腾的过程是惨不忍睹的,一直到凌晨2、3点才睡觉。这么重大的一个改变,Google也不写一下,至少要在javadoc里写清楚吧。我也想知道问题的答案:What is a good Android reference for changes like this?