展会信息港展会大全

android访问NFC的SE
来源:互联网   发布日期:2015-09-28 16:15:21   浏览:2739次  

导读:android访问NFC的SE所有文档都在这里。可惜的是,目前只能访问内部SE,对于外部sim或SD的SE,几乎所有的手机都不支持,原因:支持SIM卡的SE,还没有AT命令;支持SD卡的SE...

android访问NFC的SE所有文档都在这里。

可惜的是,目前只能访问内部SE,对于外部sim或SD的SE,几乎所有的手机都不支持,原因:支持SIM卡的SE,还没有AT命令;支持SD卡的SE,还没有API接口。为什么会这样,很简单,因为它们不是google,没有开源的精神!所以我们现在只能访问内部SE,就是存在NFC芯片的SE。

访问SE使用的是SEService/Smartcard Service。手机上必须要安装SEService/Smartcard Service,这个由手机研发实现。

创建

[html]

seService = new SEService(this, this);

继承

[html]

implements SEService.CallBack

实现接口

[html]

public void serviceConnected(SEService service)

{

}

就可以访问SE了,代码如下:

[html]

public class MainActivity extends Activity implements SEService.CallBack {

private SEService seService;

NfcAdapter mNfc;

TextView mTextView;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

mNfc = NfcAdapter.getDefaultAdapter(this);

// do layout and UI stuff

setContentView(R.layout.main);

mTextView = (TextView) this.findViewById(R.id.text);

try {

// 访问SEService

seService = new SEService(this, this);

} catch (SecurityException e) {

mTextView.append("Binding not allowed, uses-permission SMARTCARD?");

} catch (Exception e) {

mTextView.append("Exception: " + e.getMessage());

}

}

@Override

protected void onDestroy() {

if (seService != null && seService.isConnected()) {

seService.shutdown();

}

super.onDestroy();

}

//连接上SEService

public void serviceConnected(SEService service)

{

Session session = null;

Channel basicChannel = null;

try {

mTextView.append("Getting available readers...\n");

Reader[] readers = seService.getReaders();

//readers[1]就是内部SE

session = readers[1].openSession();

//选择card manager aid

byte[] aid = {(byte) 0xA0,0x00,0x00,0x00,0x03,0x00,0x00,0x00};

basicChannel = session.openBasicChannel(aid);

//readers[1]获取card prodution life cycle 数据

byte[] CPLC = {(byte) 0x80,(byte) 0xca,(byte) 0x9f,0x7f,0x00};

byte[] response1 = basicChannel.transmit(CPLC);

if(response1.length>=20)

{

mTextView.append(String.format("SerialID: %02x%02x%02x%02x\n",

response1[15],response1[16],response1[17],response1[18]));

}

} catch (Exception e) {

mTextView.append("Error occured: "+e.getMessage()+"\n");

}

if(basicChannel!=null)

basicChannel.close();

if(session!=null)

session.close();

}

}

赞助本站

人工智能实验室

相关热词: android开发 教程

相关内容
AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港