2015-05-20 2 views
1

Я медленно изучаю Android. В настоящее время я на NFC, я изучил несколько обучающих программ, и я начинаю понимать немного лучше, как это работает, и как читать и писать теги, что я могу сделать теперь на тех, которые я купил. Большинство людей хотят, чтобы их приложение запускалось, как только они были близки к тегу, но для учебных целей я хотел бы начать открытие только тогда, когда я нажал кнопку, другими словами, я хочу контролировать обнаружение. Я понимаю, что для немедленного запуска приложения мы реализуем фильтр ACTION_NDEF_DISCOVERED в Manifest.xml . Я также читал, что фильтрация с помощью намерений работает только в том случае, если наше приложение не находится на переднем плане. Если наше приложение работает на переднем плане, оно не будет уведомлено, поэтому мы должны использовать диспетчер отправки переднего плана NFC.Android NFC read Tag только при нажатии кнопки

Я не могу понять, как я могу манипулировать фильтром и передним планом, чтобы они реагировали только на мой клик кнопки.

Мой новый вопрос: будет ли он работать как для кнопок чтения, так и для записи?

Может ли кто-нибудь помочь? Если вы дадите мне какой-нибудь код, пожалуйста, будьте любезны, чтобы объяснить это, я действительно изучаю и понимаю :-)

Cheers.

ответ

1

Посмотрите на эту библиотеку под названием инструменты NDEF - link.

Я использовал его некоторое время назад, чтобы читать и писать тег NFC при нажатии кнопки. Взгляните на библиотеку и мой код и поиграйте с ним.

public class NFCReadActivity extends NfcReaderActivity 
{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_read_nfc); 

     // Read the tag, without prompting how/who should read it 
     setDetecting(true); 
    } 

    @Override 
    protected void readNdefMessage(Message message) 
    { 
     if (message != null) 
     { 
      // Iterate through all records in message 
      for (int k = 0; k < message.size(); k++) 
      { 
       Record record = message.get(k); 

       // Get record type (record.getClass().getSimpleName()) 
       if (record instanceof TextRecord) 
       { 
        // Get NFC message 
        String message = ((TextRecord) record).getText(); 

        // Inform user 
        Crouton.makeText(this, message, Style.CONFIRM).show(); 
       } 
      } 
     } 
    } 

    // An empty NDEF message was read 
    @Override 
    protected void readEmptyNdefMessage() 
    { 
     Crouton.makeText(this, getString(R.string.NFC_empty_message), Style.ALERT).show(); 
    } 

    // Something was read via NFC, but it was not an NDEF message 
    @Override 
    protected void readNonNdefMessage() 
    { 
     Crouton.makeText(this, getString(R.string.NFC_non_ndef_message), Style.ALERT).show(); 
    } 

    // NFC feature was found and is currently enabled 
    @Override 
    protected void onNfcStateEnabled() 
    { 

    } 

    // NFC feature was found but is currently disabled 
    @Override 
    protected void onNfcStateDisabled() 
    { 
     Crouton.makeText(this, getString(R.string.NFC_state_disabled), Style.ALERT).show(); 
     new GoToSettingsDialog(this).showNFCSettings(); 
    } 

    // NFC setting changed since last check. For example, the user enabled NFC in the wireless settings 
    @Override 
    protected void onNfcStateChange(boolean enabled) 
    { 

    } 

    // This device does not have NFC hardware 
    @Override 
    protected void onNfcFeatureNotFound() 
    { 
     Crouton.makeText(this, getString(R.string.NFC_not_found), Style.ALERT).show(); 
    } 
} 
+0

Привет, Марко, я уже знал об инструментах NDEF. Я думаю, что я понимаю большую часть вашего кода, но то, что я не получаю, это 3 строки кода, начиная с: // Прочитайте тег, не запрашивая, как/кто его должен прочитать. Что именно вы делаете? – Clararhea

+0

Метод ** setDetecting() ** происходит из библиотеки NDEF, он делает то, что он говорит, он начинает прослушивать/обнаруживать любые теги NFC. Идея состоит в том, что когда пользователь нажимает кнопку, вы открываете новое действие, которое может читать теги NFC, и когда вы покидаете действие, оно останавливается. Вы также можете реализовать его, не открывая новые возможности. – Marko

+0

Извините, я не понимаю. Если в моей кнопке чтения я вызываю setDetecting(), он придумает «Я вижу тег», тогда я могу сделать все, что нужно, чтобы прочитать его, не так ли? Означает ли это, что для моей кнопки записи мне нужно снова вызвать тот же метод, чтобы обнаружить тег, а затем сделать то, что необходимо написать на нем? readNdefMessage() - это метод вызова, чтобы прочитать тег, правильно? Я помещаю это в свой метод myButton1.setOnClickListener()? – Clararhea

Смежные вопросы