如何将HCE hostapduservice绑定到android上的主要活动

时间:2014-03-20 04:09:20

标签: android nfc hce

hy..i有一项任务是让我的kitkat-nexus充当标签。我有ACS 122U作为读者。我已阅读此网站http://blog.opendatalab.de/hack/2013/11/07/android-host-card-emulation-with-acr122/中的程序示例。然后我在我自己的日食上尝试了这些代码。

主要活动:

public class MainActivity extends Activity implements OnMessageReceived, ReaderCallback {

    private NfcAdapter nfcAdapter;
    private ListView listView;
    private IsoDepAdapter isoDepAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = (ListView)findViewById(R.id.listView);
        isoDepAdapter = new IsoDepAdapter(getLayoutInflater());
        listView.setAdapter(isoDepAdapter);
        nfcAdapter = NfcAdapter.getDefaultAdapter(this);
        Log.i("end of onCreate-----","onCreate HCE");
    }

    @Override
    public void onResume() {
        super.onResume();
        //nfcAdapter.enableReaderMode(this, this, NfcAdapter.FLAG_READER_NFC_A | NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK,
            //  null);

        //nfcAdapter.disableReaderMode(this); //tambahan poipo
        Log.i("onResume---", "onResume");
    }

    @Override
    public void onPause() {
        super.onPause();
        nfcAdapter.disableReaderMode(this);
        Log.i("onPause---", "onPause");
    }

    @Override
    public void onTagDiscovered(Tag tag) {
        IsoDep isoDep = IsoDep.get(tag);
        IsoDepTransceiver transceiver = new IsoDepTransceiver(isoDep, this);
        Thread thread = new Thread(transceiver);
        Log.i("dibawah thread", "ontagdiscovered");
        thread.start();
    }

    @Override
    public void onMessage(final byte[] message) {
        runOnUiThread(new Runnable() {

            @Override
            public void run() {
                isoDepAdapter.addMessage(new String(message));
                Log.i("didlmrun---", "onMessage");
            }
        });

        Log.i("diluarrun---", "onMessage");
    }

    @Override
    public void onError(Exception exception) {
        onMessage(exception.getMessage().getBytes());
    }
}

hostapduservice:

...   ... ...

@Override
    public byte[] processCommandApdu(byte[] apdu, Bundle extras) {
        if (selectAidApdu(apdu)) {
            Log.i("HCEDEMO====", "Application selected====");
            return getWelcomeMessage();
        }
        else {
            Log.i("HCEDEMO======", "Received: =====" + new String(apdu));
            return getNextMessage();
        }
    }

... ... ...

然后在清单文件中:

<uses-sdk
        android:minSdkVersion="19"
        android:targetSdkVersion="19" />

    <uses-permission android:name="android.permission.NFC" />
    <uses-feature android:name="FEATURE_NFC_HOST_CARD_EMULATION"/>




    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <service
            android:name=".MyHostApduService"
            android:exported="true"
            android:permission="android.permission.BIND_NFC_SERVICE" >
            <intent-filter>
                <action android:name="android.nfc.cardemulation.action.HOST_APDU_SERVICE" />
            </intent-filter>

            <meta-data
                android:name="android.nfc.cardemulation.host_apdu_service"
                android:resource="@xml/apduservice" />
        </service>

         <activity
            android:name="de.grundid.hcedemo.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>


        </activity>





    </application>

好吧,当我运行上面的源代码时,我看到我的acs122u连续闪烁,当我点击它靠近它的nexus。但我没有看到来自hostapdu服务的log.i(....)。在eclipse log cat中,主活动中只有一些log.i。我应该怎么做将hostapdu服务绑定到主要活动,所以我的nexus可以充当标签... ??? 提前谢谢......: - )

0 个答案:

没有答案