android每个版本都保函开发者无处不在的调侃的味道,今天浅谈多击“固件版本”preference之后,触发的机器人图片或动画。
Android4.4版本的代码实现如下:
if (preference.getKey().equals(KEY_FIRMWARE_VERSION)) {
System.arraycopy(mHits, 1, mHits, 0, mHits.length-1);
mHits[mHits.length-1] = SystemClock.uptimeMillis();
if (mHits[0] >= (SystemClock.uptimeMillis()-500)) {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClassName("android",
com.android.internal.app.PlatLogoActivity.class.getName());
try {
startActivity(intent);
} catch (Exception e) {
Log.e(LOG_TAG, "Unable to start activity " + intent.toString());
}
}
}
多击的判断部分在mHits[0] >= (SystemClock.uptimeMillis()-500),首先System.arraycopy实现的功能数组的内部元素自拷贝,每次mHits[0]都被mHits[1]覆盖,从而判断是否是按连击事件处理。
工作中需要开启一个多击触发app的暗门,从而仿照此法加了对KEY_KERNEL_VERSION的多击处理如下:
if (preference.getKey().equals(KEY_KERNEL_VERSION)) {
System.arraycopy(mHits, 1, mHits, 0, mHits.length-1);
mHits[mHits.length-1] = SystemClock.uptimeMillis();
if (mHits[0] >= (SystemClock.uptimeMillis()-500)) {
Intent mIntent = new Intent();
ComponentName comp = new ComponentName("com.marvell.factorytest",
"com.marvell.factorytest.Main");
mIntent.setComponent(comp);
mIntent.setAction("android.intent.action.VIEW");
try {
startActivity(mIntent);
} catch (Exception e) {
Log.e(LOG_TAG, "Unable to start activity " + mIntent.toString());
}
}
}
此番多击KEY_KERNEL_VERSION preference触发工厂测试app(一个隐藏的app)的MainActivity,但试了多次,发现无法触发,后来追踪KEY_FIRMWARE_VERSION发现,该项多设置了findPreference(KEY_FIRMWARE_VERSION).setEnabled(true); 抱着尝试的态度添加了findPreference(KEY_KERNEL_VERSION).setEnabled(true);果真OK了。原来此项setEnable(true)是设置控件可用,在此做一记录,加深印象,同时给为搞定的同仁一个小提示。O(∩_∩)O~