Android连接/断开扫描枪时屏幕刷新异常解决分析
前言
当你吃着火锅,唱着歌在Android终端上面连接扫码枪(包括蓝牙 USB等等)准备进行扫码工作时,突然屏幕一闪刷新了,造成临时加载的数据丢失了。本篇章就是为了解决这个问题的。
一.现象和整套解决方案
1.1 现场复盘
插入和拔出扫码枪时演示demo效果如下:
1.2 分析原因
扫描枪连接时是将其作为外部物理输入设备,即物理键盘,而安卓在改变屏幕方向、接入外部键盘时都是弹出隐藏键盘时都是手机状态改变,会导致重新执行onCreate( )方法,而造成部分数据丢失。
1.3 解决方案
解决方案比较简单分如下两步走:
- 在对应的AndroidManifest.xml配置如下内容,如下所示:
<activity
android:name="com.pax.api.test.ApiActivity"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:screenOrientation="landscape"
android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
android:theme="@style/AppTheme" >
- 然后在activity中重写onConfigurationChanged()方法,不做任何处理,就是重写就行了,如下所示:
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
//其中keyboard表示键盘类型发生了变化,比如用户使用了外接键盘,其中取值为1表示显示系统键盘,为2表示隐藏系统键盘
//keyboardHidden表示键盘的访问属性发生了变化,比如用户调出了键盘
Configuration configuration = getResources().getConfiguration();
Log.e("config", "newConfig keyboard = " + newConfig.keyboard);
Log.e("config", "newConfig keyboardHidden = " + newConfig.keyboardHidden);
Log.e("config", "configuration keyboard = " + configuration.keyboard);
Log.e("config", "configuration keyboardHidden = " + configuration.keyboardHidden);
}
结语
好了,今天的博客到这里就结束了,各位江湖见。