Java CardEmulation似乎正常,但未接收字节[]

Java CardEmulation似乎正常,但未接收字节[],java,android,hce,Java,Android,Hce,打印出来的所有日志都很好,但这东西不起作用。请帮忙 AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.abc.hcetest"> <uses

打印出来的所有日志都很好,但这东西不起作用。请帮忙

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.abc.hcetest">

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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


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

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

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

</manifest>
ApduService

public class ApduService extends HostApduService {
    final static String LOGTAG = ApduService.class.getName();

    @Override
    public byte[] processCommandApdu(byte[] commandApdu, Bundle extras) {
        if(commandApdu != null){
            Log.d(LOGTAG, "processCommandApdu " + commandApdu.length);
        }
        else{
            Log.d(LOGTAG, "processCommandApdu " + commandApdu);
        }
        return null;
    }

    private boolean canStartTrans() {
        Log.d(LOGTAG, "in can start trans");
        return true;
    }

    @Override
    public void onDeactivated(int reason) {
        Log.d(LOGTAG, "onDeactivated: " + reason);
    }
}
打印件为:

setPreferredNFCService isSet:true

(nfc!=null):真

(comp!=null):true

仿真返回值:true

由于
emulationRetVal
true
,因此APDU服务应处于活动状态,并与
cardsemulation
相关。但是,它不起作用


要使HCE正常运行,我必须做些什么?

您没有显示您的
apduservice.xml
,该文件是进行AID注册的文件。或者,您应该在应用程序中手动调用
CardEmulation::registerAidsForService


确保您执行了中概述的所有步骤。您没有显示您的
apduservice.xml
,该文件是进行AID注册的文件。或者,您应该在应用程序中手动调用
CardEmulation::registerAidsForService

确保执行中概述的所有步骤

public class ApduService extends HostApduService {
    final static String LOGTAG = ApduService.class.getName();

    @Override
    public byte[] processCommandApdu(byte[] commandApdu, Bundle extras) {
        if(commandApdu != null){
            Log.d(LOGTAG, "processCommandApdu " + commandApdu.length);
        }
        else{
            Log.d(LOGTAG, "processCommandApdu " + commandApdu);
        }
        return null;
    }

    private boolean canStartTrans() {
        Log.d(LOGTAG, "in can start trans");
        return true;
    }

    @Override
    public void onDeactivated(int reason) {
        Log.d(LOGTAG, "onDeactivated: " + reason);
    }
}