2013-04-11 2 views
1

Я просто пытаюсь прочитать содержимое тега. Но чем дольше я это изучаю, тем больше чувствую себя единственным, кто не понимает, как это работает.Как сканировать тег с помощью NFC?

Просматривая сайт developer.android.com, я нашел следующий метод:

public String readTag(Tag tag) { 
     MifareUltralight mifare = MifareUltralight.get(tag); 
     try { 
      mifare.connect(); 
      byte[] payload = mifare.readPages(4); 
      return new String(payload, Charset.forName("US-ASCII")); 
     } catch (IOException e) { 
      Log.e(TAG, "IOException while writing Scanner message...", e); 
     } finally { 
      if (mifare != null) { 
       try { 
        mifare.close(); 
       } 
       catch (IOException e) { 
        Log.e(TAG, "Error closing tag...", e); 
       } 
      } 
     } 
     return null; 
    } 

Теперь, прежде чем я могу использовать, что мне нужно, чтобы инициализировать некоторые вещи:

public void configScanner() 
    { 
     Intent intent = getIntent(); 
     tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 
     pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); 
     ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED); 
     try { 
      ndef.addDataType("*/*"); /* Handles all MIME based dispatches. You should specify only the ones that you need. */ 
     } 
     catch (MalformedMimeTypeException e) { 
      throw new RuntimeException("fail", e); 
     } 
     intentFiltersArray = new IntentFilter[] {ndef, }; 
     techListsArray = new String[][] { new String[] { Ndef.class.getName() } }; 
    } 

Тогда я просто попробуйте выполнить его.

public void scanClick(View v) 
{ 
    textview1.setText(readTag(tag)); 
} 

Я также добавил некоторые вещи в манифесте, и мой собственный XML-файл

Manifest:

<intent-filter> 
    <action android:name="android.nfc.action.TECH_DISCOVERED"/> 
</intent-filter> 
<meta-data android:name="android.nfc.action.TECH_DISCOVERED" 
      android:resource="@xml/scan" /> 

scan.xml

<?xml version="1.0" encoding="UTF-8"?> 
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> 
    <tech-list> 
     <tech>android.nfc.tech.IsoDep</tech> 
     <tech>android.nfc.tech.NfcA</tech> 
     <tech>android.nfc.tech.NfcB</tech> 
     <tech>android.nfc.tech.NfcF</tech> 
     <tech>android.nfc.tech.NfcV</tech> 
     <tech>android.nfc.tech.Ndef</tech> 
     <tech>android.nfc.tech.NdefFormatable</tech> 
     <tech>android.nfc.tech.MifareClassic</tech> 
     <tech>android.nfc.tech.MifareUltralight</tech> 
    </tech-list> 
</resources> 

Однако, когда я исполняю код я получаю сбой при выполнении readTag(tag). Я просто не понимаю, как заставить этот материал работать.

По требованию: выход LogCat:

04-11 17:13:07.650: E/AndroidRuntime(672): FATAL EXCEPTION: main 
04-11 17:13:07.650: E/AndroidRuntime(672): java.lang.IllegalStateException: Could not execute method of the activity 
04-11 17:13:07.650: E/AndroidRuntime(672): at android.view.View$1.onClick(View.java:3591) 
04-11 17:13:07.650: E/AndroidRuntime(672): at android.view.View.performClick(View.java:4084) 
04-11 17:13:07.650: E/AndroidRuntime(672): at android.view.View$PerformClick.run(View.java:16966) 
04-11 17:13:07.650: E/AndroidRuntime(672): at android.os.Handler.handleCallback(Handler.java:615) 
04-11 17:13:07.650: E/AndroidRuntime(672): at android.os.Handler.dispatchMessage(Handler.java:92) 
04-11 17:13:07.650: E/AndroidRuntime(672): at android.os.Looper.loop(Looper.java:137) 
04-11 17:13:07.650: E/AndroidRuntime(672): at android.app.ActivityThread.main(ActivityThread.java:4745) 
04-11 17:13:07.650: E/AndroidRuntime(672): at java.lang.reflect.Method.invokeNative(Native Method) 
04-11 17:13:07.650: E/AndroidRuntime(672): at java.lang.reflect.Method.invoke(Method.java:511) 
04-11 17:13:07.650: E/AndroidRuntime(672): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
04-11 17:13:07.650: E/AndroidRuntime(672): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
04-11 17:13:07.650: E/AndroidRuntime(672): at dalvik.system.NativeStart.main(Native Method) 
04-11 17:13:07.650: E/AndroidRuntime(672): Caused by: java.lang.reflect.InvocationTargetException 
04-11 17:13:07.650: E/AndroidRuntime(672): at java.lang.reflect.Method.invokeNative(Native Method) 
04-11 17:13:07.650: E/AndroidRuntime(672): at java.lang.reflect.Method.invoke(Method.java:511) 
04-11 17:13:07.650: E/AndroidRuntime(672): at android.view.View$1.onClick(View.java:3586) 
04-11 17:13:07.650: E/AndroidRuntime(672): ... 11 more 
04-11 17:13:07.650: E/AndroidRuntime(672): Caused by: java.lang.NullPointerException 
04-11 17:13:07.650: E/AndroidRuntime(672): at android.nfc.tech.MifareUltralight.get(MifareUltralight.java:94) 
04-11 17:13:07.650: E/AndroidRuntime(672): at com.example.android_test.MainActivity.readTag(MainActivity.java:108) 
04-11 17:13:07.650: E/AndroidRuntime(672): at com.example.android_test.MainActivity.scanClick(MainActivity.java:155) 
04-11 17:13:07.650: E/AndroidRuntime(672): ... 14 more 
+1

Вы можете разместить вывод LogCat? –

+0

Хорошо, что там написано, что такое ошибка и что ее вызывает. Я мало знаю об этих конкретных ошибках, поэтому я предлагаю вам немного поискать InvocationTargetException –

ответ

1

Я не вижу этого в части манифеста вы вывесили, но вам действительно нужно.

Добавьте к этому ваш манифест

<uses-permission android:name="android.permission.NFC" /> 
+0

его там, а также

+0

Хорошо, пожалуйста, напишите вывод logcat, в котором говорится, что ошибка –

+0

уже отправила его;) –

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