2012-06-26 3 views
0

я должен написать простое приложение, чтобы прочитать ISO B картукак читать карту ISODEP NFC

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.tag_viewer); 
    mTagContent = (LinearLayout) findViewById(R.id.list); 
    mTitle = (TextView) findViewById(R.id.title); 
    resolveIntent(getIntent()); 
} 



void resolveIntent(Intent intent) { 
    // Parse the intent 
    String action = intent.getAction(); 
    Log.e(TAG, "toto "); 
    if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(action)) { 
    try{ 
      myTag.connect(); 
      if (myTag.isConnected()){ 
       byte[] response = myTag.transceive(command); 
       //logText(new String(response)); 
       Log.e(TAG, "Result " + response); 
      } 
      myTag.close(); 

     }catch (IOException e) { 
       e.printStackTrace(); 
     } 

    } else { 
     Log.e(TAG, "Unknown intent " + intent); 
     finish(); 
     return; 
    } 
} 

моя проблема я не успех, чтобы войти в тест, если (NfcAdapter.ACTION_TECH_DISCOVERED.equals (действие)). Я систематически имею «Непознанное намерение».

относительно манифеста:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.android.nfc"> 
<uses-permission android:name="android.permission.NFC" /> 
<uses-permission android:name="android.permission.CALL_PHONE" /> 
<application 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" 
> 
     <activity android:name="TagViewer" 
     android:theme="@android:style/Theme.NoTitleBar" 
    > 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
     <intent-filter> 
      <action android:name="android.nfc.action.TECH_DISCOVERED"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
     </intent-filter> 
      <meta-data android:name="android.nfc.action.TECH_DISCOVERED" 
       android:resource="@xml/nfc_tech_filter" /> 
    </activity> 
</application> 
<uses-sdk android:minSdkVersion="9" /> 
<uses-feature android:name="android.hardware.nfc" android:required="true" /> 

спасибо за вашу помощь.

+0

Не могли бы вы также добавить содержимое 'xml/nfc_tech_filter'?

+0

<ресурсы XMLNS: XLIFF = "урну: оазисные: Названия: дц: XLIFF: документ: 1.2"> \t \t андроид. nfc.tech.IsoDep user1482868

+0

Я пытаюсь обнаружить карту iso B, без каких-либо успехов, где чтение тега является совершенным. Спасибо за вашу помощь. – user1482868

ответ

0

Ваша проблема заключается в том, что вы вызываете resolIntent в методе onCreate.

Это должно сделать трюк:

@Override 
protected void onNewIntent(Intent pIntent) { 
    super.onNewIntent(pIntent); 

    resolveIntent(pIntent); 

} 

Чтобы получить тег объекта, я только с помощью

Tag tagFromIntent = pIntent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 

     NfcA tag = NfcA.get(tagFromIntent); 

в моем onNewIntent-метод

К сожалению, я не мог проверить это для NfcB.

0

Вы должны создать объект NfcAdapter

private NfcAdapter mNfcAdapter; 

чем ассоциировать объект с NFC в OnCreate метод

mNfcAdapter = NfcAdapter.getDefaultAdapter(this); 

сделать некоторые проверки, прежде чем запустить приложение, чтобы быть уверенным, что телефон имеет NFC

if (mNfcAdapter == null) { 
    // Stop here, we definitely need NFC 
    Toast.makeText(this, "This device doesn't support NFC.", Toast.LENGTH_LONG).show(); 
    finish(); 
    return; 
} 

по методу onResume разрешает отправку

@Override 
public void onResume() { 
    super.onResume(); 
    Intent intent = new Intent(activity.getApplicationContext(), activity.getClass()); 
    PendingIntent pendingIntent = PendingIntent.getActivity(activity.getApplicationContext(), 0, intent, 0); 
    mNfcAdapter.enableForegroundDispatch(activity, pendingIntent, null, null); 
} 

на методе OnPause отключить диспетчерское

@Override 
protected void onPause() { 
    mNfcAdapter.disableForegroundDispatch(activity); 
} 

наконец переопределить onNewIntent метод для обработки намерение

@Override 
protected void onNewIntent(Intent intent) { 
    //handle intent here 
} 

в вашем случае вызова "resolveIntent (умысел)" внутри onNewIntent метод чем следовать этому сообщению для обработки тега IsoDep: Read data from NFC tag (IsoDep)

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