关闭

NFC读取sim卡之建立卡连接

标签: androideclipsenfcsession
1377人阅读 评论(6) 收藏 举报

这里就讲建立sim卡连接的具体操作了,总结一下在建立卡连接的时候出现的问题以及对问题的解决办法。

问题1:遇到闪退,或者是应用没有报错但是就是程序与sim卡之间就是没有建立连接。

解决:一般这问题是openmobileapi.jar 包版本过低,更新到最新版本编号

问题2:如果应用于卡能建立连接但是打不开通道(有openLogicalChannel和openBasicChannel),或者是session都获取不到。

解决:这个一般是测试sim卡权限没开放,需要找卡商把测试卡权限开放便可以了


Android端代码:


package com.example.testorder;


import java.io.IOException;


import org.simalliance.openmobileapi.Channel;
import org.simalliance.openmobileapi.Reader;
import org.simalliance.openmobileapi.SEService;
import org.simalliance.openmobileapi.Session;


import android.annotation.SuppressLint;
import android.app.Activity;
import android.nfc.NfcAdapter;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;


public class MainActivity extends Activity implements SEService.CallBack {
private SEService seService;
NfcAdapter mNfc;
TextView mTextView;
EditText met;
Session session = null;
Channel channel = null;
String order;
@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mNfc = NfcAdapter.getDefaultAdapter(this);
// do layout and UI stuff
setContentView(R.layout.activity_main);
mTextView = (TextView) this.findViewById(R.id.tv1);
met = (EditText) findViewById(R.id.et);
order =getResources().getString(R.string.order);
met.setText(order);
try {
// 访问SEService
seService = new SEService(this, this);
mTextView.append("seService..\n");
} catch (SecurityException e) {
mTextView.append("Binding not allowed, uses-permission SMARTCARD?");
} catch (Exception e) {
mTextView.append("Exception: " + e.getMessage());
Log.e("err", e.getMessage());
}
}


@Override
protected void onDestroy() {
if (seService != null && seService.isConnected()) {
seService.shutdown();
}
super.onDestroy();
}


public void excuCade(View view) {
// 对卡操作执行指令
byte[] respApdu = null;
try {
respApdu = channel.transmit(HexTool.hexStringToBytes(order));
} catch (IllegalStateException | IllegalArgumentException
| SecurityException | NullPointerException | IOException e) {
mTextView.append("指令失败.."+e.getMessage());
}
String data = HexTool.bytesToHexString(respApdu);
mTextView.append("指令返回值.."+data);
}


// 连接上SEService
@Override
public void serviceConnected(SEService arg0) {
mTextView.append("serviceConnected..\n");


try {
mTextView.append("Getting available readers...\n");
Reader[] readers = seService.getReaders();
// readers[1]就是内部SE
session = readers[0].openSession();
mTextView.append("打开session成功...\n");
} catch (Exception e) {
mTextView.append("打开session失败: " + e.getMessage() + "\n");
}
try {
channel = session.openLogicalChannel(HexTool
.hexStringToBytes("A000000533C000FF860000000074"));
mTextView.append("打开逻辑通道成功...\n");
} catch (Exception e) {
mTextView.append("打开逻辑通道失败: " + e.getMessage() + "\n");
}


if (channel != null)
channel.close();
if (session != null)
session.close();


}
}

具体的有dome,我已经上传,可以下载运行

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6563次
    • 积分:180
    • 等级:
    • 排名:千里之外
    • 原创:11篇
    • 转载:1篇
    • 译文:0篇
    • 评论:12条
    最新评论