Android 开发之实现公交卡扣费功能

Posted 心宽何处不桃源

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 开发之实现公交卡扣费功能相关的知识,希望对你有一定的参考价值。

对公交卡实现扣费功能主要分以下几个部分:

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








以上是关于Android 开发之实现公交卡扣费功能的主要内容,如果未能解决你的问题,请参考以下文章

android开发教程之开机启动服务service示例

通过Android模拟的NFC卡,为啥重新绑定到iPhone要删除?明明公交卡可以不删说明这个功能可以实现。

向银行系统添加利率和透支费

上周热点回顾(11.15-11.21)

电信计费业务:预后融合之万恶的负余额

多并发时支付如何保持账户余额的一致性?