从NFC标签读取数据 [英] Reading Data from NFC Tag

查看:188
本文介绍了从NFC标签读取数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好我正在开发用于读取和写入数据,NFC标签的应用程序。我从NFC标签读取数据有问题。当我尝试读取数据,我的应用程序崩溃的第一时间,当我再次扫描标签第二次应用程序读取数据。 请大家帮我出这个问题。这是我的code。 先谢谢了。

 公共类阅读延伸活动{

    标签detectedTag;
    TextView的txtType,txtSize,txtWrite,txtRead;
    NfcAdapter nfcAdapter;
    IntentFilter的[] readTagFilters;
    PendingIntent pendingIntent;

    @覆盖
    保护无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        的setContentView(R.layout.read);
        。getWindow()setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.custom_title);

         nfcAdapter = NfcAdapter.getDefaultAdapter();
         detectedTag = getIntent()getParcelableExtra(NfcAdapter.EXTRA_TAG)。
        txtType =(TextView中)findViewById(R.id.txtType);
        txtSize =(TextView中)findViewById(R.id.txtsize);
        txtWrite =(TextView中)findViewById(R.id.txtwrite);
        txtRead =(TextView中)findViewById(R.id.txt_read);

        pendingIntent = PendingIntent.getActivity(getApplicationContext(),0,
                新的意图(这一点,的getClass())。
                addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP),0);

        IntentFilter的tagDetected =新的IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);
        IntentFilter的过滤器2 =新的IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
        readTagFilters =新的IntentFilter [] {tagDetected,过滤器2};

    }

    保护无效onNewIntent(意向意图){

        如果(getIntent()的getAction()。等于(NfcAdapter.ACTION_TAG_DISCOVERED)){
            detectedTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);

            readFromTag(getIntent());
        }
    }

@覆盖
    保护无效onResume(){

        super.onResume();
        nfcAdapter.enableForegroundDispatch(这一点,pendingIntent,readTagFilters,NULL);
    }


    公共无效readFromTag(意向意图){

        NDEF NDEF = Ndef.get(detectedTag);


        尝试{
            ndef.connect();

            txtType.setText(ndef.getType()的toString());
            txtSize.setText(将String.valueOf(ndef.getMaxSize()));
            txtWrite.setText(ndef.isWritable()真:假);
            Parcelable []消息= intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);

            如果(消息!= NULL){
                NdefMessage [] ndefMessages =新NdefMessage [messages.length]
                的for(int i = 0; I< messages.length;我++){
                    ndefMessages [I] =(NdefMessage)消息[I]
                }
            NdefRecord记录= ndefMessages [0] .getRecords()[0];

            byte []的有效载荷= record.getPayload();
            字符串文本=新的String(负载);
            txtRead.setText(文本);


            ndef.close();

        }
        }
        赶上(例外五){
            Toast.makeText(getApplicationContext(),无法读取从标签,Toast.LENGTH_LONG).show();
        }
    }

}
 

解决方案

唯一的线onNewIntent失踪()方法 setIntent(意向); 我把它添加和code运行正常。

Hi I am developing an app for reading and writing data to NFC Tag. I am having problem in reading data from NFC Tag. When I try to read data my application crashes for first time and again when I scan the Tag for the second time the app reads the data. Please help me out on this issue. Here is my code. Thanks in advance.

public class Read extends Activity {

    Tag detectedTag;
    TextView txtType,txtSize,txtWrite,txtRead;
    NfcAdapter nfcAdapter;
    IntentFilter[] readTagFilters;
    PendingIntent pendingIntent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        setContentView(R.layout.read);
        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title);

         nfcAdapter = NfcAdapter.getDefaultAdapter();
         detectedTag =getIntent().getParcelableExtra(NfcAdapter.EXTRA_TAG);
        txtType  = (TextView) findViewById(R.id.txtType);
        txtSize  = (TextView) findViewById(R.id.txtsize);
        txtWrite = (TextView) findViewById(R.id.txtwrite);
        txtRead  = (TextView) findViewById(R.id.txt_read);

        pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, 
                new Intent(this,getClass()).
                addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);

        IntentFilter tagDetected = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);
        IntentFilter filter2     = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
        readTagFilters = new IntentFilter[]{tagDetected,filter2};

    }

    protected void onNewIntent(Intent intent) {

        if(getIntent().getAction().equals(NfcAdapter.ACTION_TAG_DISCOVERED)){
            detectedTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);

            readFromTag(getIntent());
        }
    }

@Override
    protected void onResume() {

        super.onResume();
        nfcAdapter.enableForegroundDispatch(this, pendingIntent, readTagFilters, null);
    }


    public void readFromTag(Intent intent){

        Ndef ndef = Ndef.get(detectedTag);


        try{
            ndef.connect();

            txtType.setText(ndef.getType().toString());
            txtSize.setText(String.valueOf(ndef.getMaxSize()));
            txtWrite.setText(ndef.isWritable() ? "True" : "False");
            Parcelable[] messages = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);

            if (messages != null) {
                NdefMessage[] ndefMessages = new NdefMessage[messages.length];
                for (int i = 0; i < messages.length; i++) {
                    ndefMessages[i] = (NdefMessage) messages[i];
                }
            NdefRecord record = ndefMessages[0].getRecords()[0];

            byte[] payload = record.getPayload();
            String text = new String(payload);
            txtRead.setText(text);


            ndef.close();

        }
        }
        catch (Exception e) {
            Toast.makeText(getApplicationContext(), "Cannot Read From Tag.", Toast.LENGTH_LONG).show();
        }
    }

}

解决方案

The only line missing in onNewIntent() Method was setIntent(intent); I added it and the code is running fine.

这篇关于从NFC标签读取数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆