最近在学习NFC,参考了两篇不错的文章

参考地址:

NFC基础http://blog.csdn.net/zoeice/article/details/9714867

NFC高级http://blog.csdn.net/zoeice/article/details/9714963

本文是使用了NFC的标签纸和小米3手机测试

首先新建一个Activity类

package com.cayden.run.application;import android.app.Activity;import android.app.PendingIntent;import android.content.Intent;import android.nfc.NdefMessage;import android.nfc.NdefRecord;import android.nfc.NfcAdapter;import android.nfc.Tag;import android.nfc.tech.Ndef;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.Toast;/** *  *   * @author cuiran * @version 1.0.0 */public class RunApplicationActivity extends Activity {private Button mSelectAutoRunApplication;private String mPackageName;private NfcAdapter mNfcAdapter;private PendingIntent mPendingIntent;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_auto_run_application);mSelectAutoRunApplication = (Button) findViewById(R.id.button_select_auto_run_application);mNfcAdapter = NfcAdapter.getDefaultAdapter(this);mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,getClass()), 0);}public void onNewIntent(Intent intent) {if (mPackageName == null)return;Tag detectedTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);writeNFCTag(detectedTag);}public void onResume() {super.onResume();if (mNfcAdapter != null)mNfcAdapter.enableForegroundDispatch(this, mPendingIntent, null,null);}public void onPause() {super.onPause();if (mNfcAdapter != null)mNfcAdapter.disableForegroundDispatch(this);}    public void onClick_SelectAutoRunApplication(View view)    {    Intent intent = new Intent(this, InstalledApplicationListActivity.class);    startActivityForResult(intent, 0);    }public void writeNFCTag(Tag tag) {if (tag == null) {return;}NdefMessage ndefMessage = new NdefMessage(new NdefRecord[] { NdefRecord.createApplicationRecord(mPackageName) });int size = ndefMessage.toByteArray().length;try {Ndef ndef = Ndef.get(tag);if(ndef!=null){ndef.connect();if(!ndef.isWritable()){return;}if(ndef.getMaxSize() < size){return;}ndef.writeNdefMessage(ndefMessage);Toast.makeText(this, "ok", Toast.LENGTH_LONG).show();}} catch (Exception e) {// TODO: handle exception}}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data){if (resultCode == 1){mSelectAutoRunApplication.setText(data.getExtras().getString("package_name"));String temp = mSelectAutoRunApplication.getText().toString();mPackageName = temp.substring(temp.indexOf("\n") + 1);}}}

在此Activity中,可以点击按钮然后跳转到另一个Activity,是用来显示应用列表

package com.cayden.run.application;import java.util.ArrayList;import java.util.List;import android.app.ListActivity;import android.content.Intent;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ArrayAdapter;public class InstalledApplicationListActivity extends ListActivity implementsOnItemClickListener {private List<String> mPackages = new ArrayList<String>();@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);PackageManager packageManager = getPackageManager();List<PackageInfo> packageInfos = packageManager.getInstalledPackages(PackageManager.GET_ACTIVITIES);for (PackageInfo packageInfo : packageInfos) {mPackages.add(packageInfo.applicationInfo.loadLabel(packageManager)+ "\n" + packageInfo.packageName);}ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, android.R.id.text1,mPackages);setListAdapter(arrayAdapter);getListView().setOnItemClickListener(this);}@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position,long id) {Intent intent = new Intent();intent.putExtra("package_name", mPackages.get(position));setResult(1, intent);finish();}}

当选择应用后,会回调并传回

packageInfo.applicationInfo.loadLabel(packageManager)+ "\n" + packageInfo.packageName
具体操作,先将nfc标签纸放入手机背面会执行

public void onNewIntent(Intent intent) {if (mPackageName == null)return;Tag detectedTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);writeNFCTag(detectedTag);}
如果不为空,就将所选择的应用写入标签纸

然后退出应用后,将标签纸放入手机背面就会自动执行所选择的应用程序。

关于NdefRecord 在官网也给出了api

http://developer.android.com/reference/android/nfc/package-summary.html

更多相关文章

  1. Intellij Idea12 旗舰版 安卓(Android) 开发环境搭建流程
  2. 使用NDK插件并支持NDK调试(DEBUG)
  3. Android第三方文件选择器:aFileChooser
  4. Android(安卓)studio使用教程
  5. 在CentOS下搭建Android(安卓)开发环境
  6. ubuntu10.10 下安装android 2.2开发环境
  7. 添加android:screenOrientation="portrait"后警告报红
  8. Android(安卓)图片选择详解及实例代码
  9. Android(安卓)ListView+CheckBox实现全选、单选

随机推荐

  1. Android输入子系统之启动过程分析
  2. Android消息推送简介
  3. Android学习路线总结,绝对干货
  4. Android实现程序前后台切换效果
  5. android主流UI布局
  6. android looper介绍
  7. Android(安卓)adb不是内部或外部命令 问
  8. Dex2jar 与 JD-GUI快速反编译Android(安
  9. Android通过软解码播放视频
  10. 分析Android(安卓)根文件系统启动过程(ini