基本信息
源码名称:android nfc EasyTagWrite示例源码下载
源码大小:2.39M
文件格式:.zip
开发语言:Java
更新时间:2014-03-20
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
package skyseraph.easytagwrite; import skyseraph.android.util.CustomDialog; import skyseraph.android.util.LogUtil; import skyseraph.android.util.MyConstant; import skyseraph.android.util.nfc.BobNdefMessage; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.PendingIntent; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.graphics.Color; import android.nfc.NdefMessage; import android.nfc.NfcAdapter; import android.nfc.Tag; import android.nfc.tech.Ndef; import android.nfc.tech.NdefFormatable; import android.os.AsyncTask; import android.os.Bundle; import android.provider.Settings; import android.util.DisplayMetrics; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.WindowManager; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; import java.io.IOException; public class MainActivity extends Activity { private static final String TAG_ASSIST = "[MainActivity]-"; // NFC Declarations private NfcAdapter mNfcAdapter = null; private IntentFilter[] mFilters = null; private PendingIntent mPendingIntent = null; private String[][] mTechLists = null; private Context mContext; private NdefMessage NDEFMsg2Write = null; // UI private EditText mEditText1 = null; private EditText mEditText2 = null; private TextView mTextView1 = null; private TextView mTextView2 = null; private Spinner mSpinner = null; private ArrayAdapter mAdapter = null; private Button writeUrlButton, saveUrlButton, exitButton; private static final String[] spinnerStr = { "TNF_ABSOLUTE_URI", "TNF_MIME_MEDIA", "TNF_WELL_KNOWN RTD-TEXT", "TNF_WELL_KNOWN RTD-URI", "TNF_EXTERNAL_TYPE", }; private String payloadStr = ""; private String typeStr = ""; private int tagTypeFlag = 0;// private AlertDialog alertDialog = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContext = this; checkNFCFunction(); // NFC Check initUI();// Init UI initNFC();// Init NFC } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub super.onOptionsItemSelected(item); switch (item.getItemId()) // item clicked { case R.id.action_settings: // Intent setnfc = new Intent(Settings.ACTION_WIRELESS_SETTINGS); Intent setnfc = new Intent(Settings.ACTION_NFC_SETTINGS); startActivity(setnfc); break; case R.id.action_about: dialog(); break; } return true; } protected void dialog() { AlertDialog.Builder builder = new AlertDialog.Builder(mContext); builder.setTitle(getString(R.string.dialog_notice)); alertDialog = builder.create(); builder.setCancelable(true);// back alertDialog.setCanceledOnTouchOutside(true); alertDialog.show(); } @Override public void onResume() { super.onResume(); // get NFC object Tag detectTag = getIntent().getParcelableExtra(NfcAdapter.EXTRA_TAG); // validate that this tag can be written if (supportedTechs(detectTag.getTechList())) { switch (tagTypeFlag) { case 0:// ABSOLUTE_URI NDEFMsg2Write = BobNdefMessage.getNdefMsg_from_ABSOLUTE_URI(payloadStr, false); // writeNdefMessageToTag(NDEFMsg2Write, detectTag); // By Function new WriteTask(this, NDEFMsg2Write, detectTag).execute(); // By // AsyncTask // Class break; case 1:// MIME_MEDIA NDEFMsg2Write = BobNdefMessage.getNdefMsg_from_MIME_MEDIA(payloadStr, "application/skyseraph.nfc_demo", false); // writeNdefMessageToTag(NDEFMsg2Write, detectTag); new WriteTask(this, NDEFMsg2Write, detectTag).execute(); break; case 2:// RTD_TEXT NDEFMsg2Write = BobNdefMessage.getNdefMsg_from_RTD_TEXT(payloadStr, false, false); // writeNdefMessageToTag(NDEFMsg2Write, detectTag); new WriteTask(this, NDEFMsg2Write, detectTag).execute(); break; case 3:// RTD_URI NDEFMsg2Write = BobNdefMessage.getNdefMsg_from_RTD_URI(payloadStr, (byte)0x01, false); // writeNdefMessageToTag(NDEFMsg2Write, detectTag); new WriteTask(this, NDEFMsg2Write, detectTag).execute(); break; case 4:// EXTERNAL_TYPE NDEFMsg2Write = BobNdefMessage.getNdefMsg_from_EXTERNAL_TYPE(payloadStr, false); // writeNdefMessageToTag(NDEFMsg2Write, detectTag); new WriteTask(this, NDEFMsg2Write, detectTag).execute(); break; default:// RTD_URI NDEFMsg2Write = BobNdefMessage.getNdefMsg_from_RTD_URI(payloadStr, (byte)0x01, false); // writeNdefMessageToTag(NDEFMsg2Write, detectTag); new WriteTask(this, NDEFMsg2Write, detectTag).execute(); break; } } else { Toast.makeText(mContext, "This tag type is not supported", Toast.LENGTH_SHORT).show(); } } @Override public void onNewIntent(Intent intent) { LogUtil.i(MyConstant.TAG, TAG_ASSIST "Discovered tag with intent: " intent); setIntent(intent); } @Override public void onPause() { super.onPause(); if (alertDialog != null) alertDialog.cancel(); disableForegroundDispatch(); } private void initUI() { LogUtil.i(MyConstant.TAG, TAG_ASSIST "into initUI"); // TODO Auto-generated method stub mEditText1 = (EditText)this.findViewById(R.id.write_ndef_tag_et1); mEditText2 = (EditText)this.findViewById(R.id.write_ndef_tag_et2); mTextView1 = (TextView)findViewById(R.id.write_ndef_tag_tv1); mTextView2 = (TextView)findViewById(R.id.write_ndef_tag_tv2); saveUrlButton = (Button)findViewById(R.id.write_ndef_tag_saveBtn); saveUrlButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { writeUrlButton.setEnabled(true); switch (tagTypeFlag) { case 0:// ABSOLUTE_URI payloadStr = mEditText1.getText().toString(); LogUtil.i(MyConstant.TAG, TAG_ASSIST "payloadStr=" payloadStr); mTextView1.setText("(Touch NFC Tag to write-ABSOLUTE_URI): " payloadStr); mTextView1.setTextColor(Color.BLUE); break; case 1:// MIME_MEDIA payloadStr = mEditText2.getText().toString(); typeStr = mEditText1.getText().toString(); LogUtil.i(MyConstant.TAG, TAG_ASSIST "payloadStr=" payloadStr ",typeStr=" typeStr); mTextView1.setText("Touch NFC Tag to write-MIME_MEDIA): " typeStr); mTextView1.setTextColor(Color.BLUE); mTextView2 .setText("Touch NFC Tag to write-MIME_MEDIA,Data): " payloadStr); mTextView2.setTextColor(Color.BLUE); break; case 2:// RTD_TEXT payloadStr = mEditText1.getText().toString(); LogUtil.i(MyConstant.TAG, TAG_ASSIST "payloadStr=" payloadStr); mTextView1.setText("(Touch NFC Tag to write-RTD_TEXT): " payloadStr); mTextView1.setTextColor(Color.BLUE); break; case 3:// RTD_URI payloadStr = mEditText1.getText().toString(); LogUtil.i(MyConstant.TAG, TAG_ASSIST "payloadStr=" payloadStr); mTextView1.setText("(Touch NFC Tag to write-RTD_URI): http://www." payloadStr); mTextView1.setTextColor(Color.BLUE); break; case 4:// EXTERNAL_TYPE_SMS typeStr = "skyseraph.nfc_demo:externalType"; payloadStr = mEditText2.getText().toString(); LogUtil.i(MyConstant.TAG, TAG_ASSIST "payloadStr=" payloadStr); mTextView1.setText("Touch NFC Tag to write-EXTERNAL_TYPE): " payloadStr); mTextView1.setTextColor(Color.BLUE); break; default:// RTD_URI payloadStr = mEditText1.getText().toString(); LogUtil.i(MyConstant.TAG, TAG_ASSIST "payloadStr=" payloadStr); mTextView1.setText("(Touch NFC Tag to write): http://www." payloadStr); mTextView1.setTextColor(Color.BLUE); break; } } }); writeUrlButton = (Button)this.findViewById(R.id.write_ndef_tag_writeBtn); writeUrlButton.setEnabled(false); writeUrlButton.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { // Write to a tag for as long as the dialog is shown. enableForegroundDispatch(); AlertDialog.Builder builder = new AlertDialog.Builder(mContext); builder.setTitle("Touch tag to write").setOnCancelListener( new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { LogUtil.i(MyConstant.TAG, TAG_ASSIST "mTagWriter - onCancel"); disableForegroundDispatch(); } }); alertDialog = builder.create(); alertDialog.setCanceledOnTouchOutside(false); alertDialog.show(); } }); exitButton = (Button)findViewById(R.id.write_ndef_tag_exitBtn); exitButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { finish(); } }); mSpinner = (Spinner)findViewById(R.id.write_ndef_tag_sp); mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, spinnerStr); mAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); mSpinner.setAdapter(mAdapter); mSpinner.setOnItemSelectedListener(new SpinnerXMLSelectedListener()); mSpinner.setVisibility(View.VISIBLE); mSpinner.setSelection(0, true); } class SpinnerXMLSelectedListener implements OnItemSelectedListener { public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { LogUtil.i(MyConstant.TAG, TAG_ASSIST "What you have selected=" mAdapter.getItem(arg2) ",position=" arg2); saveUrlButton.setEnabled(true); writeUrlButton.setEnabled(false); switch (arg2) { case 0:// ABSOLUTE_URI tagTypeFlag = 0; mTextView1 .setText("Please input a absolute uri,exp: http://www.baidu.com/index.html"); mTextView1.setTextColor(Color.RED); mEditText2.setVisibility(View.GONE); mTextView2.setVisibility(View.GONE); break; case 1:// MIME_MEDIA tagTypeFlag = 1; mTextView2 .setText("Please input a mime_media, exp: application/skyseraph.nfc_demo"); mTextView1.setTextColor(Color.RED); mEditText2.setVisibility(View.VISIBLE); mTextView2.setVisibility(View.VISIBLE); mTextView1 .setText("Please input your mime_media data, exp: This is a MIME_MEDIA"); mTextView2.setTextColor(Color.RED); break; case 2:// RTD TEXT tagTypeFlag = 2; mTextView1.setText("Please input a RTD TEXT,exp: This is an RTD-TEXT"); mTextView1.setTextColor(Color.RED); mEditText2.setVisibility(View.GONE); mTextView2.setVisibility(View.GONE); break; case 3: // RTD URI tagTypeFlag = 3; mTextView1.setText("Please input a RTD uri,exp: baidu.com"); mTextView1.setTextColor(Color.RED); mEditText2.setVisibility(View.GONE); mTextView2.setVisibility(View.GONE); break; case 4:// EXTERNAL_TYPE tagTypeFlag = 4; mTextView1 .setText("Please input a EXTERNAL_TYPE, exp: This is an EXTERNAL_TYPE"); mTextView1.setTextColor(Color.RED); mEditText2.setVisibility(View.GONE); mTextView2.setVisibility(View.GONE); break; default:// RTD_URI tagTypeFlag = 3; mTextView1.setText("Please input a RTD uri,exp: baidu.com"); mTextView1.setTextColor(Color.RED); mEditText2.setVisibility(View.GONE); mTextView2.setVisibility(View.GONE); break; } } public void onNothingSelected(AdapterView<?> arg0) { } } /** * Init NFC */ private void initNFC() { LogUtil.i(MyConstant.TAG, TAG_ASSIST "into initNFC"); mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); // FLAG_ACTIVITY_SINGLE_TOP: not creating multiple instances of the same // application. IntentFilter tagDetected = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED); IntentFilter ndefDetected = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED); IntentFilter techDetected = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED); // ndef.addDataScheme("http"); // Intent filters for writing to a tag mFilters = new IntentFilter[] { ndefDetected, };// just trying to find a tag,not ndef or tech mTechLists = new String[][] { new String[] { Ndef.class.getName() }, new String[] { NdefFormatable.class.getName() } }; } /** * @param message * @param detectedTag * @return */ boolean writeNdefMessageToTag(NdefMessage message, Tag detectedTag) { LogUtil.i(MyConstant.TAG, TAG_ASSIST "into writeNdefMessageToTag"); int size = message.toByteArray().length; try { Ndef ndef = Ndef.get(detectedTag); if (ndef != null) { ndef.connect(); if (!ndef.isWritable()) { Toast.makeText(this, "Tag is read-only.", Toast.LENGTH_LONG).show(); return false; } if (ndef.getMaxSize() < size) { Toast.makeText( this, "The data cannot written to tag, Tag capacity is " ndef.getMaxSize() " bytes, message is " size " bytes.", Toast.LENGTH_LONG) .show(); return false; } ndef.writeNdefMessage(message); ndef.close(); String str = "Message is written tag, message=" message; Toast.makeText(this, str, Toast.LENGTH_LONG).show(); return true; } else { NdefFormatable ndefFormat = NdefFormatable.get(detectedTag); if (ndefFormat != null) { try { ndefFormat.connect(); ndefFormat.format(message); ndefFormat.close(); Toast.makeText(this, "The data is written to the tag ", Toast.LENGTH_SHORT) .show(); return true; } catch (IOException e) { Toast.makeText(this, "Failed to format tag", Toast.LENGTH_SHORT).show(); return false; } } else { Toast.makeText(this, "NDEF is not supported", Toast.LENGTH_SHORT).show(); return false; } } } catch (Exception e) { Toast.makeText(this, "Write opreation is failed", Toast.LENGTH_SHORT).show(); } return false; } /** * @Title: supportedTechs * @Description: Check Support Techs * @param @param techs * @param @return * @return boolean * @throws */ public static boolean supportedTechs(String[] techs) { LogUtil.i(MyConstant.TAG, TAG_ASSIST "into supportedTechs"); for (String s : techs) { LogUtil.i(MyConstant.TAG, TAG_ASSIST "all supportedTechs = " s); } boolean ultralight = false; boolean nfcA = false; boolean ndef = false; for (String tech : techs) { if (tech.equals("android.nfc.tech.MifareUltralight")) { ultralight = true; LogUtil.i(MyConstant.TAG, TAG_ASSIST "supportedTechs is:ultralight"); } else if (tech.equals("android.nfc.tech.NfcA")) { nfcA = true; LogUtil.i(MyConstant.TAG, TAG_ASSIST "supportedTechs is:NfcA"); } else if (tech.equals("android.nfc.tech.Ndef") || tech.equals("android.nfc.tech.NdefFormatable")) { ndef = true; LogUtil.i(MyConstant.TAG, TAG_ASSIST "supportedTechs is:Ndef/NdefFormatable"); } else if (tech.equals("android.nfc.tech.MifareClassic")) { LogUtil.i(MyConstant.TAG, TAG_ASSIST "supportedTechs is:MifareClassic"); } } if (ultralight && nfcA && ndef) { return true; } else { return false; } } /** * enable TagWrite */ private void enableForegroundDispatch() { if (mNfcAdapter != null) { mNfcAdapter.enableForegroundDispatch(this, mPendingIntent, mFilters, mTechLists); } } /** * disable TagWrite */ private void disableForegroundDispatch() { if (mNfcAdapter != null) { mNfcAdapter.disableForegroundDispatch(this); } } /** * NFC Function Check By skyseraph 2013-2 */ private void checkNFCFunction() { // TODO Auto-generated method stub mNfcAdapter = NfcAdapter.getDefaultAdapter(this); // check the NFC adapter first if (mNfcAdapter == null) { // mTextView.setText("NFC apdater is not available"); Dialog dialog = null; CustomDialog.Builder customBuilder = new CustomDialog.Builder(mContext); customBuilder .setTitle(getString(R.string.inquire)) .setMessage(getString(R.string.nfc_notice2)) .setIcon(R.drawable.dialog_icon2) .setNegativeButton(getString(R.string.no), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); finish(); } }) .setPositiveButton(getString(R.string.yes), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); finish(); } }); dialog = customBuilder.create(); dialog.setCancelable(false);// back dialog.setCanceledOnTouchOutside(false); SetDialogWidth(dialog).show(); return; } else { if (!mNfcAdapter.isEnabled()) { Dialog dialog = null; CustomDialog.Builder customBuilder = new CustomDialog.Builder(mContext); customBuilder .setTitle(getString(R.string.inquire)) .setMessage(getString(R.string.nfc_notice3)) .setIcon(R.drawable.dialog_icon2) .setNegativeButton(getString(R.string.no), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); finish(); } }) .setPositiveButton(getString(R.string.yes), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); Intent setnfc = new Intent( Settings.ACTION_WIRELESS_SETTINGS); // Intent setnfc = new // Intent(Settings.ACTION_NFC_SETTINGS); startActivity(setnfc); } }); dialog = customBuilder.create(); dialog.setCancelable(false);// back dialog.setCanceledOnTouchOutside(false); SetDialogWidth(dialog).show(); return; } } } /** * @param dialog * @return */ private Dialog SetDialogWidth(Dialog dialog) { DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); int screenWidth = dm.widthPixels; int screenHeight = dm.heightPixels; WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); if (screenWidth > screenHeight) { params.width = (int)(((float)screenHeight) * 0.875); } else { params.width = (int)(((float)screenWidth) * 0.875); } dialog.getWindow().setAttributes(params); return dialog; } /** *********************************************************************** @Title :WriteNdefTag.java * @Package :skyseraph.nfc_demo.tag.write * @ClassName : WriteTask * @Description : TODO * @author : skyseraph00@163.com * @date : 2013-9-13 上午11:38:58 * @version : V1.0 */ static class WriteTask extends AsyncTask<Void, Void, Void> { Activity host = null; NdefMessage msg = null; Tag tag = null; String text = null; WriteTask(Activity host, NdefMessage msg, Tag tag) { LogUtil.i(MyConstant.TAG, TAG_ASSIST "into WriteTask AsyncTask"); this.host = host; this.msg = msg; this.tag = tag; } @Override protected Void doInBackground(Void... arg0) { int size = msg.toByteArray().length; try { Ndef ndef = Ndef.get(tag); if (ndef == null) { NdefFormatable formatable = NdefFormatable.get(tag); if (formatable != null) { try { formatable.connect(); try { formatable.format(msg); } catch (Exception e) { text = "Failed to format tag,Tag refused to format"; } } catch (Exception e) { text = "Failed to connect tag,Tag refused to connect"; } finally { formatable.close(); } } else { text = "NDEF is not supported in this Tag"; } } else { ndef.connect(); try { if (!ndef.isWritable()) { text = "Tag is read-only"; } else if (ndef.getMaxSize() < size) { text = "The data cannot written to tag,Message is too big for tag,Tag capacity is " ndef.getMaxSize() " bytes, message is " size " bytes."; } else { ndef.writeNdefMessage(msg); text = "Message is written tag, message=" msg; } } catch (Exception e) { text = "Tag refused to connect"; } finally { ndef.close(); } } } catch (Exception e) { text = "Write opreation is failed,General exception: " e.getMessage(); LogUtil.i(MyConstant.TAG, TAG_ASSIST "Exception when writing tag,Write opreation is failed" text); } return (null); } @Override protected void onPostExecute(Void unused) { if (text != null) { Toast.makeText(host, text, Toast.LENGTH_SHORT).show(); } // host.finish(); // after writed, auto finish } } }