Создание моего приложения NFC - PullRequest
0 голосов
/ 23 августа 2011

Привет всем! Я разработал приложение NFC и установил его на свой телефон NEXUS S ... но при показе тега приложение не загружалось ?? могу ли я нет у ?? и как мне это преодолеть ..

Моя проблема заключается в том, что когда нексус обнаруживает тег, мое приложение не отображается в всплывающем окне "выберите действие".

public class TagReader extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Intent intent = this.getIntent();
        LinearLayout content = (LinearLayout) findViewById(R.id.list);
        Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
        NdefMessage[] msgs = null;
        if (rawMsgs != null) {
            msgs = new NdefMessage[rawMsgs.length];
            msgs[0] = (NdefMessage) rawMsgs[0];
        }
        NdefRecord[] record = msgs[0].getRecords();
        Preconditions.checkArgument(record[0].getTnf() == NdefRecord.TNF_WELL_KNOWN);
        Preconditions.checkArgument(Arrays.equals(record[0].getType(), NdefRecord.RTD_TEXT));
        byte[] bRecord = record[0].getPayload();
        String textEncoding = ((bRecord[0] & 0200) == 0) ? "UTF-8" : "UTF-16";
        int languageCodeLength = bRecord[0] & 0077;
        LayoutInflater inflater = LayoutInflater.from(this);
        content.removeAllViews();
        try{
            String languageCode = new String(bRecord, 1, languageCodeLength, "US-ASCII");
            String text = new String(bRecord, languageCodeLength + 1,bRecord.length - languageCodeLength - 1, textEncoding);
            TextView textv = (TextView) inflater.inflate(R.layout.tag_text, content, false);
            textv.setText(text);
            content.addView(textv);
            String x = null;
        }catch(Exception e){
                e.printStackTrace();
        }
    } 
}


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.nfc.TagReader"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="10" />
    <uses-permission android:name="android.permission.NFC"/>

    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
        <activity android:name=".TagReader"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.nfc.action.TAG_DISCOVERED" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

    </application>
</manifest>

Пожалуйста, ответьте как можно скорее, пожалуйста, я действительно застрял ..

1 Ответ

0 голосов
/ 26 августа 2011

Возможно, вам не хватает фильтров намерений, которые должны быть связаны с соответствующей деятельностью.

Добавьте следующий фрагмент xml в AndroidManifest.xml под своим основным классом запуска

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

Также обратите внимание, что вам потребуется файл nfc_tech_filter.xml в res / xml, который определяет tech-list.

Надеюсь, это поможет!

...