isInitialStickyBroadcast()
显然仅在2.0之后可用(SDK 5)。
我收到了这个错误:
“未捕获的处理程序:由于未捕获的异常,线程主要退出 java.lang.VerifyError的“
这只发生在1.6。 Android 2.0及以上版本没有任何问题,但这是最重要的一点。
我无法捕获错误/异常(java.lang.VerifyError),并且我知道它是由调用isInitialStickyBroadcast()引起的,这在SDK 4中是不可用的,这就是它包含在SDK检查中的原因。
我只需要这个BroadcastReceiver工作在2.0+并且不打破1.6,它是市场上的应用程序,对于2.0+以上的用户需要UNDOCK功能但显然不在1.6但是有相当多的用户仍在1.6。
这是我正在使用的部分代码的易读版本。请注意,它包含在SDK检查中,仅在2.0+上运行,但VerifyError仍然显示。
private BroadcastReceiver mUndockedReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
//FROM ECLAIR FORWARD, BEFORE DONUT THIS INTENT WAS NOT IMPLEMENTED
if (Build.VERSION.SDK_INT >= 5)
{
if (!isInitialStickyBroadcast()) {
//Using constant instead of Intent.EXTRA_DOCK_STATE to avoid problems in older SDK versions
int dockState = intent.getExtras().getInt("android.intent.extra.DOCK_STATE", 1);
if (dockState == 0)
{
finish();
}
}
}
}
};
答案 0 :(得分:1)
您的问题是,当您不执行isInitialStickyBroadcast()
时,类加载器会尝试在加载类时解析所有方法,因此您的SDK 4设备在此时失败,因为没有{{1} }。
您有两个主要选择:
isInitialStickyBroadcast()
,作为自己文件中的公共类。一个具有SDK 4逻辑,一个具有SDK 5+逻辑。在您致电BroadcastReceiver
时,根据SDK检查注册所需的一个。