RFID期末复习题

RFID期末复习题
RFID期末复习题

1.近场通信(Near Field Communication,NFC)是一种短距高频的无线电技术,在13.56MHz 频率运行于20厘米距离内。其传输速度有106 Kbit/秒、212 Kbit/秒或者424 Kbit/秒三种。目前近场通信已通过成为ISO/IEC IS 18092国际标准、ECMA-340标准与ETSI TS 102 190标准。NFC采用主动和被动两种读取模式。

2.LLCP(逻辑链路控制协议)规范描述了NFC 协议栈LLC(逻辑链路控制)的

能和特性。LLCP位于Digital协议之上,是LLCP基于NFC-DEP传输协议,LLCP与

NFC-DEP一起应用在点对点通信中。

3NDEF是轻量级的紧凑的二进制格式,可带有URL、vCard和NFC定义的各种数据类型。NDEF的由各种数据记录组成,而各个记录由报头(Header)和有效载荷(Payload)组成,其中NDEF记录的数据类型和大小由记录载荷

的报头注明,这里的报头包含3部分,分别为Length、Type和Identifier。

4.ContentProvider(内容提供者)是Android中的四大组件之一。主要用于对外共享数据,也就是通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider对指定应用中的数据进行操作。

5.蓝牙低能耗(BLE)技术是低成本、短距离、可互操作的鲁棒性无线技术,工作在免许可的2.4GHz ISM射频频段。蓝牙低能耗技术采用可变连接时间间隔,由于BLE技术采用非常快速的连接方式,因此平时可以处于“非连接”状态(节省能源),此时链路两端相互间只是知晓对方,只有在必要时才开启链路,然后在尽可能短的时间内关闭链路。

6.JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)

7.JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。使用java与本地已编译的代码交互,通常会丧失平台可移植性。

8.xml

XML 指可扩展标记语言(EXtensible Markup Language)

XML 是一种标记语言,很类似HTML

XML 的设计宗旨是传输数据,而非显示数据XML 标签没有被预定义。您需要自行定义标签。

XML 被设计为具有自我描述性。XML 是W3C 的推荐标准

二、简答

1.请说出NFC有哪两种通信方式。

答:(1)主动模式。

在主动模式下,NFC发起设备要发送数据给

目标设备时,必须产生自己的射频场;

被读NFC设备发送响应给发起设备时,也要

产生自己的射频场。

即,每台NFC设备需要向其他NFC设备发送

数据信息时,都要产生自己的射频场

(2)被动模式。

在被动模式下,主设备在整个通信过程中提

供射频场。

2.请说出NFC哪三种工作模式。

工作模式:读写模式(读卡器模式),p2p

(点对点)模式,卡模拟模式

3.NFC技术标准划分的层次。

1)RF Layer(射频)层

2)Mode Switch(模式切换)层

3)NFC Protocol 层

4)App层

3.BLE协议层的划分:核心协议层、电缆替代

协议层、电话控制协议层和采纳的其它协议

层。

4. NFC五种Tag标签类型

基于ISO 14443A标准的Types 1 and 2; 基于

日本工业标准(JIS)X 6319-4的FeliCa; 兼容

ISO 14443A和B标准的Type 4。NFC-V技术

为解决方案提供商提供了标准化的方式,使

用NFC标准的读写器读取和编码ISO15693

标签。

1.NFC与RFID区别。

答:NFC技术起源于RFID,但与RFID相比有

一定的区别,主要包括:

1)工作频率。NFC工作频率率为13.56MHz,

而RFID工作频率有低频、高频(13.56)和

超高频

2)工作距离。NFC工作距离理论上为

0~20cm,但在产品实现上,由于采用了特殊

功率技术,使其工作距离只有0~10cm.RFID

具有不同工作频率,其工作距离从几厘米到

几十米不等。

3)工作模式。NFC同时支持读写读写模式和

卡模拟模式。RFID中,读卡器和非接触卡是

独立的两个实体,不能相互切换。

4)点对点通信。NFC支持点对点模式,RFID

不支持

5)应用领域。RFID更多的被应用在生产物

流跟踪资产管理上,NFC则在门禁公交车

手机支付等领域发挥作用

6)标准协议。NFC的底层通信技术兼容高频

RFID技术(13.56)的底层通信标准,即兼容

ISO14443/ISO15693标准。NFC技术还定义了

比较完整的上层应用规范,如LLCP、NDEF、

SNEP、RTD等

2.Start service 与bind server区别

服务不能自己运行,需要通过调用

startService()或bindService()方法启动

服务。这两个方法都可以启动Service,但

是它们的使用场合有所不同。

1)使用startService()方法启用服务,调用

者与服务之间没有关连,即使调用者退出了,

服务仍然运行。使用bindService()方法启

用服务,调用者与服务绑定在了一起,调用

者一旦退出,服务也就终止。

2)bindService()方法启动服务,在服务未被

创建时,系统会先调用服务的onCreate()方

法,接着调用onBind()方法。这个时候调用

者和服务绑定在一起,调用者退出了,系统

就会先调用服务的onUnbind()方法,接着调

用onDestroy()方法。如果调用

bindService()方法前服务已经被绑定,多次

调用bindService()方法并不会导致多次创

建服务及绑定(也就是说onCreate()和

onBind()方法并不会被多次调用)。如果调用

者希望与正在绑定的服务解除绑定,可以调

用unbindService()方法,调用该方法也会

导致系统调用服务的

onUnbind()-->onDestroy()方法。

2.请解释下在单线程模型中Message、

Handler、MessageQueue、Looper之间的关

系,Handler简介:

一个Handler允许你发送和处理

Message和Runable对象,这些对象和一个

线程的MessageQueue相关联。每一个线程实

例和一个单独的线程以及该线程的

MessageQueue相关联。当你创建一个新的

Handler时,它就和创建它的线程绑定在一

起了。这里,线程我们也可以理解为线程的

MessageQueue。从这一点上来看,Handler

把Message和Runable对象传递给

MessageQueue,而且在这些对象离开

MessageQueue时,Handler负责执行他们。

Handler有两个主要的用途:(1)确定在

将来的某个时间点执行一个或者一些

Message和Runnable对象。(2)在其他线程

(不是Handler绑定线程)中排入一些要执行

的动作。

3.handler机制的原理

andriod提供了

Handler 和Looper 来满足线程间的通

信。Handler先进先出原则。Looper类用来

管理特定线程内对象之间的消息交换

(MessageExchange)。

1)Looper: 一个线程可以产生一个

Looper对象,由它来管理此线程里的

MessageQueue(消息队列)。

2)Handler: 你可以构造Handler对象

来与Looper沟通,以便push新消息到

MessageQueue里;或者接收Looper从

Message Queue取出)所送来的消息。

3) Message Queue(消息队列):用来

存放线程放入的消息。

4)线程:UIthread 通常就是

main thread,而Android启动程序时会替

它建立一个MessageQueue

android:allowBackup="true" android:icon="@drawable/logo" android:label="@string/app_nam e"

android:theme="@style/AppTheme ">

android:name="com.xunfang.io.M ainActivity"

android:label="@string/app_nam e">

android:name="android.intent.c

https://www.360docs.net/doc/3f4586979.html,UNCHER"/>

****************************

android:name="android.intent.c

https://www.360docs.net/doc/3f4586979.html,UNCHER"/>

SQL

android:allowBackup="true"

android:icon="@drawable/logo"

android:label="@string/app_nam

e"

android:theme="@style/AppTheme

">

android:name="com.xunfang.sqli

te.QueryActivity"

android:label="@string/app_nam

e">

android:name="android.intent.a

ction.MAIN"/>

android:name=".ResultActivity"

>

android:name=".UpdateActivity"

>

*********************

convertView.setTag(holder );

} else {

holder = (ViewHolder)

convertView.getTag();

}

return convertView;

}

public BookDao(Context context, String name, CursorFactory factory,

int version) {

super(context,

DB_NAME, factory, DB_VERSION);

// TODO

Auto-generated constructor stub }

* @description建表

public void

onCreate(SQLiteDatabase db) {

Log.i("tag", "onCreate");

String sql = "create table " + TAB_NAME + " (" + BookBean.FILED_ID

+ " integer primary key autoincrement, "

+ BookBean.FILED_BOOKNAME + " varchar(20), " +

BookBean.FILED_WRITER

+ " text, " + BookBean.FILED_PRESS + " varchar(20), "

+ BookBean.FILED_PRICE + " long)";

System.out.println("sql--->" + sql);

db.execSQL(sql);

}

*************************

* @description更新数据库

public void

onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

Log.i("tag", "onUpgrade");

String sql = "drop table if exist " + TAB_NAME;

db.execSQL(sql);

onCreate(db);

}

/**

* @description插入

*/

public void insert(){

// SQLiteDatabase

db=DB_NAME;

}}

private void queryData(String strBookname, String strWriter,

String strPress, String strPrice) {

if

(strBookname.equals("") && strWriter.equals("")

&&

strPress.equals("") &&

strPrice.equals("")) {

Toast.makeText(this, "必

须输入至少一项",

Toast.LENGTH_SHORT).show();

} else {

Intent intent =

new Intent(QueryActivity.this,

ResultActivity.class);

Bundle bundle =

new Bundle();

bundle.putString(BookBean

.FILED_BOOKNAME, strBookname);

bundle.putString(BookBean

.FILED_WRITER, strWriter);

bundle.putString(BookBea

.FILED_PRESS, strPress);

bundle.putString(BookBean

.FILED_PRICE, strPrice);

intent.putExtra(BUNDLE,

bundle);

startActivity(intent);

}}}

// sql查询语句拼接

String str1 =

"";

if

(list1.size() > 1) {

for (int i

= 0; i < list1.size() - 2; i++)

{str1 += " " + list1.get(0) + "

and ";}

str1 += " "

+ list1.get(list1.size() - 1);

} else {str1 =

list1.get(0);}

sql += str1;

System.out.println("sql--

>" + sql);

Cursor c =

db.rawQuery(sql, null);

while

(c.moveToNext()) {

// 存入数据集

BookBean

book = new BookBean(c.getInt(0),

c.getString(1),

c.getString(2),

c.getString(3),

c.getDouble(4));

list.add(book);

}

Log.i("tag", "

查找成功!");

} catch(Exception e)

{

Log.i("tag", "

查找失败!");

e.printStackTrace();

}

return list;}

private void initView() {

// 初始化

btnBack = (Button)

findViewById(R.id.res_ly_btn_b

ack);

System.out.println("btn

id-->" + btnBack.getId());

listview= (ListView)

findViewById(R.id.listview);

// 设置监听

btnBack.setOnClickListene

r(this);

}

public void onClick(View v)

{

if (v.getId() ==

R.id.res_ly_btn_back) {

finish();]]

System.out.println("发送

广播...");

finish();

} catch

(Exception e) {

Toast.makeText(UpdateActi

vity.this, "修改失败!",

Toast.LENGTH_SHORT)

.show();

e.printStackTrace();

}

**********************

protected void onCreate(Bundle

savedInstanceState) {

super.onCreate(savedInsta

nceState);

setContentView(https://www.360docs.net/doc/3f4586979.html,yout.a

ctivity_main);

// 获取屏幕分辨率

width =

getWindowManager().getDefaultD

isplay().getWidth();

getWindowManager().getDefaultD

isplay().getHeight();

initListener();

}

public void onClick(View v) {

switch (v.getId()) {

case

R.id.btn_write1:

etInput = new EditText(context);

new AlertDialog.Builder(this)

.setTitle("请输入字符串")

.setView(etInput)

.setPositiveButton("确定",

new

DialogInterface.OnClickListene r() {

public void onClick(DialogInterface dialog,

int whichButton) {

inputStr = etInput.getText().toString();

write2Memery(inputStr);

}

}).setNegativeButton("取消", null).show();

break;

case

R.id.btn_write2:

// 数据写入SD卡write2SDCard();

break;

case R.id.btn_read1:

// 读取内存数据readFromMemery();

break;

case R.id.btn_read2: readFromSDCard();

break;

case R.id.btn_exit:

// 新建对话框确认退出

new AlertDialog.Builder(this)

.setTitle("是否确定退出?")

.setPositiveButton("确定",

new

DialogInterface.OnClickListene r() { p ublic void

onClick(DialogInterface dialog,

int whichButton) {

finish();

}

}).setNegativeButton("取消", null).show();

break;

default:

break;}}

* @description图片写入sdcard

private void

write2SDCard() {

try (

FileOutputStream fos = new FileOutputStream(SDCard_PATH);

// 把assets下的

图片拷入sd卡

InputStream is

=

getResources().getAssets().ope

n("image.jpg");

byte buffer[] =

new byte[8192]; // 每次最多写入

8k

int count = 0;

while ((count =

is.read(buffer)) >= 0) {

fos.write(buffer, 0,

count);

}

fos.close();

is.close();

Toast.makeText(context, "

图片已经存入"+SDCard_PATH,

Toast.LENGTH_SHORT).show();

} catch(Exception e)

{

Toast.makeText(context, "

写入失败!",

Toast.LENGTH_SHORT).show();

}

}

private void

readFromSDCard() {

String name =

SDCard_PATH;

if (!new

File(name).exists()) {

Toast.makeText(

context,

android.os.Environment.ge

tExternalStorageDirectory()

+ "中没有图像",

Toast.LENGTH_SHORT).show();

return;

}

try {

Bitmap

bitmap = getBitmap2(name, width,

height);

ivSD.setImageBitmap(bitma

p);} catch (Exception e)

{Toast.makeText(context, "载入

图像失败!",

Toast.LENGTH_SHORT).show();

}}

* @description读取内存中

的文件

private void

readFromMemery() {

try {

InputStream is

= openFileInput(MEM_PATH);

byte[] buffer =

new byte[100];

int byteCount =

is.read(buffer);

String str = new

String(buffer, 0, byteCount,

"utf-8");

Toast.makeText(context,

str,

Toast.LENGTH_SHORT).show();

} catch(Exception e)

{

Toast.makeText(context, "

读取失败!",

Toast.LENGTH_SHORT).show();

}

}

private void

write2Memery(String path) {

try {

OutputStream os

= openFileOutput(MEM_PATH,

Activity.MODE_PRIVATE);

// String str =

"此条信息是从内存中读取。。";

os.write(path.getBytes("u

tf-8"));

os.close();

Toast.makeText(context, "

写入成功",

Toast.LENGTH_SHORT).show();

} catch(Exception e)

{

Toast.makeText(context, "

读取失败!",

Toast.LENGTH_SHORT).show();

}}

public static Bitmap

getBitmap2(String

imageFilePath, int

displayWidth,

int

displayHeight) {

BitmapFactory.Options

bitmapOptions = new

BitmapFactory.Options();

bitmapOptions.inJustDecod

eBounds = true;

Bitmap bmp =

BitmapFactory.decodeFile(image

FilePath, bitmapOptions);

int widthRatio = (int)

FloatMath.ceil(bitmapOptions.o

utWidth

/ (float)

displayWidth);

int heightRatio =

(int)

FloatMath.ceil(bitmapOptions.o

utHeight

/ (float)

displayHeight);

if(widthRatio > 1 &&

heightRatio > 1) {

if

(widthRatio > heightRatio) {

bitmapOptions.inSampleSiz

e = widthRatio;} else {

bitmapOptions.inSampleSiz

e = heightRatio; }

bitmapOptions.inJustDecod

eBounds = false;

bmp =

BitmapFactory.decodeFile(image

FilePath, bitmapOptions);

return bmp;

}

}

相关主题
相关文档
最新文档