LOLLIPOP中不推荐使用getRunningTasks。 您必须使用UsageStatsManager才能获取前台应用程序的包名称。我在Android 6.0上测试过,一切正常。
问题在于我不想将项目设置为从Android 5.0运行(大多数用户都在KitKat上)。所以我使用LOLLIPOP编译我的项目,并根据Android版本运行我需要的功能(我确保不要在较低的api杠杆上运行带有UsageStatsManager的任何代码)。在我的清单中,我将minSdkVersion设置为10.我已经在Android 4.1.1上测试了应用程序的工作原理,但我在Logcat中看到了这一点:
01-06 19:57:17.570: E/dalvikvm(31534): Could not find class 'android.app.usage.UsageStatsManager', referenced from method
01-06 19:57:17.570: W/dalvikvm(31534): VFY: unable to resolve check-cast 39 (Landroid/app/usage/UsageStatsManager;) in
01-06 19:57:17.570: D/dalvikvm(31534): VFY: replacing opcode 0x1f at 0x0009
01-06 19:57:17.585: D/dalvikvm(31534): DexOpt: unable to opt direct call 0x00a5 at 0x23 in L
我应该担心这些错误/警告吗? 该应用程序可以工作,但我不确定它是否适用于所有设备(api级别低于21)。
另一种可能的解决方案是使用反射,然后你会得到一些小于21的api级别的例外。我不确定如果应用程序已经完成了必须做的事情,这是否值得付出努力(我唯一的关心来自logcat)。
答案 0 :(得分:1)
我应该担心这些错误/警告吗?
不,只要您不尝试执行包含缺失项目的行。 Android应用程序通常有很多这样的消息,因为它们来自标准的"渐进增强/优雅降级"节目。 Dalvik / ART将尝试在加载类时解析符号,在无法找到符号时发出消息。但是,只要你没有使用缺失的符号,生活就会很好。
该应用程序有效,但我不确定它是否适用于所有设备(api级别低于21)。
如果你支持Android 1.x,这种方法将不起作用,因为Dalvik会抛出一个真正的异常而不是仅仅记录丢失的符号。如果你在2016年支持Android 1.x,那么你是一个圣人,疯了,或者两者兼而有之。