项目地址:https://github.com/CarpOrange/mz200alibDemo
注:第三、四点需要特别注意遵守
一、 相机
见CameraDemo,可以直接导入cameralib并依赖。
二、 刷卡模块
1、 模块类型
nfc (网上有很多nfc相关文章,如blog.csdn.net/pku_android…)manifest的配置:
<!--文件读写-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!--读卡-->
<uses-permission android:name="android.permission.NFC"/><application
android:name=".App"<activity
android:name=".ui.activity.ICCardActivity"
android:launchMode="singleTask"
android:screenOrientation="landscape">
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
</intent-filter>
<intent-filter>
<action android:name="android.nfc.action.TAG_DISCOVERED"/>
</intent-filter>
<intent-filter>
<action android:name="android.nfc.action.TECH_DISCOVERED"/>
</intent-filter>
<meta-data
android:name="android.nfc.action.TECH_DISCOVERED"
android:resource="@xml/nfc_tech_filter"/>
</activity>
<activity
android:name=".ui.activity.IdCardActivity"
android:launchMode="singleTask"
android:screenOrientation="landscape">
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<intent-filter>
<action android:name="android.nfc.action.TECH_DISCOVERED"/>
</intent-filter>
<meta-data
android:name="android.nfc.action.TECH_DISCOVERED"
android:resource="@xml/nfc_tech_filter"/>
<intent-filter>
<action android:name="android.nfc.action.TAG_DISCOVERED"/>
</intent-filter>
</activity>2、 ic卡读取
继承NfcActivty实现接口即可,NfcActivity的具体逻辑见源码。如果使用的卡的扇区密码不是默认密码0xFFFFFFFFFFFF,修改NfcActivity的成员变量password为扇区密码即可。可以在NfcActvity的generatePassword ()方法中实现给password赋值的逻辑。3、 身份证串号读取
继承NfcIdCardActivity实现接口即可,NfcIdCardActivity的具体逻辑见源码。三、定位
不管使用的什么定位sdk,都要在Application的onCreate中调用LocationHelper.getInstance().locateAtIntervals()。 这样是为了更新gps星历历书,减少偏移等。
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
//log工具初始化
try {
LogUtil.init();
} catch (Exception e) {
e.printStackTrace();
}
//每隔一段时间重新发起定位,主要是用来让设备gps模块定位更准,减少漂移
try {
LocationHelper.getInstance().locateAtIntervals();
} catch (Exception e) {
e.printStackTrace();
}
}
}
四、设备关机后完全断电(不损耗车辆电瓶)
在manifest中如下配置即可。
<receiver android:name="com.haoxueche.mz200alib.receiver.ShutdownBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_SHUTDOWN"/>
</intent-filter>
</receiver>此功能只对18年8月21之后的设备有效
五、 acc读取
AccManager.getInstance().isAccOn();六、 imei读取
SystemUtil.getImei(context);七、序列号读取
DeviceHardwareUtil.SERIAL八、修改休眠时间(屏幕会关闭)
支持设置系统中有的时长选项,15秒、30秒、1分钟等,其他不在选项中的未测试过。

<!--修改系统设置-->
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>//30秒后锁屏
boolean setSucc = SystemUtil.setScreenLockTime(this, 30);注意,屏幕休眠后cpu会进入低功耗模式,需要在Application中使用WakeLock来保持屏幕休眠后cpu的运行
<!--wakeLock-->
<uses-permission android:name="android.permission.WAKE_LOCK" />public class App extends Application {
private WakeLock cpuWakeLock;
@Override
public void onCreate() {
super.onCreate();
//其他操作
...
//保持cpu运转
PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
cpuWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "App");
cpuWakeLock.acquire();
}
}
九、修改系统时间
manifest配置,需要是系统app才能获取到以下权限,不然设置失败
<!--设置时间-->
<uses-permission android:name="android.permission.SET_TIME"/>
<uses-permission android:name="android.permission.SET_TIME_ZONE"/>代码:
//这段代码的效果是把当前系统时间设置为5分钟以前的时间
//设置时间戳 单位:毫秒
boolean setSucc = SystemClock
.setCurrentTimeMillis(System.currentTimeMillis() - 1000L * 60 * 5);十、打开系统的桌面app
Intent intent = new Intent();
intent.setClassName("com.android.launcher3", "com.android.launcher3.Launcher");
startActivity(intent);十一、禁止顶部状态栏下拉
manifest配置(需要系统权限):
<uses-permission android:name="android.permission.STATUS_BAR"/>
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR"/>
<uses-permission android:name="android.permission.DISABLE_STATUS_BAR"/>代码:
// 禁用状态栏
SystemUtil.disableStatusBar(context);十二、apk文件安装
manifest配置:
<uses-permission android:name="android.permission.INSTALL_PACKAGES"/>
此方法会自动判断app是否有系统权限,如果有会静默安装,否则需要用户点下一步。
InstallUtil.install(this, FileUtil.getRoot() + "Via.apk");十三、打开系统设置
Intent intent = new Intent();
intent.setClassName("com.android.settings","com.android.settings.Settings");
startActivity(intent);