Realization method of NFC reading and writing function in android
- 2021-12-19 07:00:13
- OfStack
In this paper, we share the specific code of NFC reading and writing function in android for your reference. The specific contents are as follows
First, check whether the device under 1 supports NFC function
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;
AlertDialog.Builder customBuilder = new AlertDialog.Builder(
this);
customBuilder
.setTitle(" It's a pity ")
.setMessage(" Didn't find NFC Device, please confirm your device support NFC Function !")
.setIcon(R.drawable.ic_banner)
.setPositiveButton(" 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;
AlertDialog.Builder customBuilder = new AlertDialog.Builder(
this);
customBuilder
.setTitle(" Prompt ")
.setMessage(" Please confirm NFC Is the function turned on !")
.setIcon(R.drawable.ic_banner)
.setPositiveButton(" Now go and open it ......",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
dialog.dismiss();
Intent setnfc = new Intent(
Settings.ACTION_NFC_SETTINGS);
startActivity(setnfc);
}
});
dialog = customBuilder.create();
dialog.setCancelable(false);// back
dialog.setCanceledOnTouchOutside(false);
SetDialogWidth(dialog).show();
return;
}
}
}
Read NFC information
package com.xxzhy.shujucaiji.fengxiang;
import android.app.Dialog;
import android.app.PendingIntent;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.nfc.FormatException;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.nfc.tech.MifareClassic;
import android.nfc.tech.Ndef;
import android.nfc.tech.NfcA;
import android.nfc.tech.NfcB;
import android.nfc.tech.NfcF;
import android.nfc.tech.NfcV;
import android.os.Bundle;
import android.provider.Settings;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.xxzhy.shujucaiji.R;
import com.xxzhy.shujucaiji.utils.ByteArrayChange;
import com.xxzhy.shujucaiji.utils.ToStringHex;
import com.xxzhy.shujucaiji.utils.ToastUtil;
import com.xxzhy.shujucaiji.utils.WebServiceClient;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
* Created by apple on 2017/10/30.
*/
public class FengxiangThreeActivity extends AppCompatActivity {
@BindView(R.id.tv_bianma)
TextView tvBianma;
@BindView(R.id.ll_input)
LinearLayout llInput;
@BindView(R.id.noteText)
TextView noteText;
@BindView(R.id.writeBtn)
Button writeBtn;
String[][] mTechLists;
private Boolean ifWrite;
private NfcAdapter mNfcAdapter;
private PendingIntent mPendingIntent;
private IntentFilter[] mFilters;
byte[] code = MifareClassic.KEY_DEFAULT;// Read and write the password of each block in the tag
private byte[] b0;
int block[] = {4, 5, 6, 8, 9, 10, 12, 13, 14, 16, 17, 18, 20, 21, 22, 24,
25, 26, 28, 29, 30, 32, 33, 34, 36, 37, 38, 40, 41, 42, 44, 45, 46,
48, 49, 50, 52, 53, 54, 56, 57, 58, 60, 61, 62};
private String samCode;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fengxiang_three);
ButterKnife.bind(this);
writeBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ifWrite = true;
}
});
samCode = getIntent().getStringExtra("samCode");
tvBianma.setText(samCode);
checkNFCFunction(); // NFC Check
mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,
getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
// Setup an intent filter for all MIME based dispatches
IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED);
try {
ndef.addDataType("*/*");
} catch (IntentFilter.MalformedMimeTypeException e) {
throw new RuntimeException("fail", e);
}
mFilters = new IntentFilter[]{ndef,};
// Set according to label type
mTechLists = new String[][]{new String[]{NfcA.class.getName()}};
}
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;
AlertDialog.Builder customBuilder = new AlertDialog.Builder(
this);
customBuilder
.setTitle(" It's a pity ")
.setMessage(" Didn't find NFC Device, please confirm your device support NFC Function !")
.setIcon(R.drawable.ic_banner)
.setPositiveButton(" 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;
AlertDialog.Builder customBuilder = new AlertDialog.Builder(
this);
customBuilder
.setTitle(" Prompt ")
.setMessage(" Please confirm NFC Is the function turned on !")
.setIcon(R.drawable.ic_banner)
.setPositiveButton(" Now go and open it ......",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
dialog.dismiss();
Intent setnfc = new Intent(
Settings.ACTION_NFC_SETTINGS);
startActivity(setnfc);
}
});
dialog = customBuilder.create();
dialog.setCancelable(false);// back
dialog.setCanceledOnTouchOutside(false);
SetDialogWidth(dialog).show();
return;
}
}
}
private Dialog SetDialogWidth(Dialog dialog) {
// TODO Automatically generated method stubs
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;
}
@Override
protected void onNewIntent(Intent intent) {
// TODO Automatically generated method stubs
super.onNewIntent(intent);
// tv1.setText(" Discover new Tag: " + ++mCount + "\n");// mCount Count
String intentActionStr = intent.getAction();// Obtained the action
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intentActionStr)// NDEF Type
|| NfcAdapter.ACTION_TECH_DISCOVERED.equals(intentActionStr)// Other types
|| NfcAdapter.ACTION_TAG_DISCOVERED.equals(intentActionStr)) {// Unknown type
// In intent Read in Tag id
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
byte[] bytesId = tag.getId();// Get id Array
// info += ByteArrayChange.ByteArrayToHexString(bytesId) + "\n";
// tv2.setText(" Label UID: " + "\n" + info);
// Read stored information
// if (mRead.isChecked()) {
// // mChange=false;
// tv3.setText(" Read Successfully ! " + readTag(tag));
// // readNfcVTag(tag);
// etSector.setText("");
// etBlock.setText("");
// etData.setText("");
// }
// Write data
if (ifWrite) {
if (samCode.length() < 16){
for (int i = samCode.length(); i < 16; i++) {
samCode+=" ";
}
}
writeTag(tag, samCode);
}
// Convert to ASCll
// if (mChange.isChecked()) {
// tv3.setText(change(tag));
// Toast.makeText(getBaseContext(), " Successful conversion ", Toast.LENGTH_SHORT).show();
// etSector.setText("");
// etBlock.setText("");
// etData.setText("");
// }
}
}
// Write data
public void writeTag(Tag tag, String str) {
MifareClassic mfc = MifareClassic.get(tag);
try {
if (mfc != null) {
mfc.connect();
} else {
Toast.makeText(this, " Write failure ", Toast.LENGTH_SHORT).show();
return;
}
boolean b = mfc.authenticateSectorWithKeyA(5, code);
if (b) {
mfc.writeBlock(4 * 5, str.getBytes());
mfc.close();
ToastUtil.showToast(" Write successful ");
finish();
}
} catch (IOException e) {
e.printStackTrace();
ToastUtil.showToast(" Write failure ");
}
}
@Override
protected void onResume() {
super.onResume();
enableForegroundDispatch();
}
private void enableForegroundDispatch() {
if (mNfcAdapter != null) {
mNfcAdapter.enableForegroundDispatch(this, mPendingIntent,
mFilters, mTechLists);
}
}
@Override
public void onPause() {
super.onPause();
disableForegroundDispatch();
}
private void disableForegroundDispatch() {
// TODO Automatically generated method stubs
if (mNfcAdapter != null) {
mNfcAdapter.disableForegroundDispatch(this);
}
}
}