对公交卡实现扣费功能主要分以下几个部分:
1.读取公交卡的余额
2.扣费
3.重获Tac
4.获取PSAMID
5.获取相应的参数
首先我们先看下实现这些功能的案例布局
<span style="font-size:18px;"><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.cpucard.library.MainActivity" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/ReadBalance"
android:layout_width="fill_parent"
android:layout_height="60sp"
android:layout_weight="1"
android:text="读余额"/>
<Button
android:id="@+id/MinusFee"
android:layout_width="fill_parent"
android:layout_height="60sp"
android:layout_weight="1"
android:text="扣费"/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/RegetTac"
android:layout_width="fill_parent"
android:layout_height="60sp"
android:layout_weight="1"
android:text="重获tac"/>
<Button
android:id="@+id/ReadPSAMID"
android:layout_width="fill_parent"
android:layout_height="60sp"
android:layout_weight="1"
android:text="获取PSAMID"/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/GetParameter"
android:layout_width="fill_parent"
android:layout_height="60sp"
android:layout_weight="1"
android:text="获取参数"/>
</LinearLayout>
</LinearLayout>
</span>
首先 我们要初始化卡对象
//创建对象
private c cardManager;
private String cpuCardBalance = "", serialNum = "";
cardManager = new c();
然后,我们要设置扣钱方式
cardManager.a(1, 3, true);
功能部分
获取卡的参数
<span style="font-size:18px;"> // 获取卡的参数
private String getAllParams() {
// TODO Auto-generated method stub
// 获取城市代码
long cardCityCode = cardManager.h();
// 获取行业代码
long cardBusinessCode = cardManager.i();
// 获取卡号
long cardPhysicsNumber = cardManager.j();
// 获取卡版本
long cardVer = cardManager.k();
// 获取卡类型
long cardType = cardManager.l();
// 获取卡启用日期
long cardStartDate = cardManager.m();
// 卡交易次数
long cardTradeCount = cardManager.n();
// 终端机流水
String termSeq = cardManager.o();
// CPU卡内号
String cpuCardNo = cardManager.q();
// 卡表面号
Long cardSurfaceNumber = cardManager.a(String.valueOf(Long
.toHexString(cardPhysicsNumber)));
return ("cardCityCode=" + cardCityCode + ",cardBusinessCode="
+ cardBusinessCode + ",cardPhysicsNumber=" + cardPhysicsNumber
+ ",cardVer=" + cardVer + ",cardType=" + cardType
+ ",cardStartDate=" + cardStartDate + ",cardTradeCount="
+ cardTradeCount + ",termSeq=" + termSeq + ",cpuCardNo="
+ cpuCardNo + ",cardSurfaceNumber=" + cardSurfaceNumber);
}</span>
获取PSAMID
<span style="font-size:18px;"> // 获取PSAMID
private String getPsamid() {
// TODO Auto-generated method stub
return cardManager.f();
}</span>
扣钱的实现方法
<span style="font-size:18px;"> private String getAccount(int realChargeValue,String balance) {
// TODO Auto-generated method stub
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
SimpleDateFormat timeFormat = new SimpleDateFormat("HHmmss");
return cardManager.a(realChargeValue,sdf.format(date), timeFormat.format(date), balance, "E00A0601");
}</span>
重获Tac的实现方法
<span style="font-size:18px;">private String getReTac() {
// TODO Auto-generated method stub
return cardManager.e();
}</span>
获取余额实现方法
<span style="font-size:18px;"> private String getBalance() {
// TODO Auto-generated method stub
return cardManager.d();
}</span>
最后,我们增加个人性化的功能,提示扣钱成功!就像我们乘公交车一样。滴~~学生卡。
<span style="font-size:18px;">
//扣费成功 响铃
void playSound() {
// TODO Auto-generated method stub
MediaPlayer mMediaPlayer = MediaPlayer.create(this, R.raw.di);
SoundPool soundPool= new SoundPool(4, AudioManager.STREAM_MUSIC, 100);
// this.playSound(2, 0);
mMediaPlayer.setLooping(false);
if (!mMediaPlayer.isPlaying()) {
mMediaPlayer.start();
}
}</span>
附件:
滴的声音
http://pan.baidu.com/s/1hrSxii4