NFC を使用して他のデバイスと対話する Android アプリを開発しています。このやり取りは、基本的に次の 2 つのステップで構成されます。
- デバイスが他のデバイスから NFC によって特定の URI を受信すると、アプリが起動されます。
- アプリが起動すると、NDEF メッセージが他のデバイスに送信されます。
最初のステップとして、次の行をAndroidManifest.xmlファイルに追加しました。そうMainActivityすれば、デバイスが type の URI を受信したときに が起動されますmyprotocol:something。
<intent-filter>
     <action android:name="android.nfc.action.NDEF_DISCOVERED" />
     <category android:name="android.intent.category.DEFAULT" />
     <data android:scheme="myprotocol" />
 </intent-filter>
2 番目のステップでは、MainActivityクラスで and を実装CreateNdefMessageCallbackしOnNdefPushCompleteCallbackます。コードは次のようになります。
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    NfcAdapter adapter = NfcAdapter.getDefaultAdapter(this);
    adapter.setNdefPushMessageCallback(this, this);
    adapter.setOnNdefPushCompleteCallback(this, this);
}
@Override
public NdefMessage createNdefMessage(NfcEvent event) {
    NdefRecord uriRecord = NdefRecord.createUri("protocol:something");
    NdefMessage message = new NdefMessage(new NdefRecord[] { uriRecord });
    return message;
}
@Override
public void onNdefPushComplete(NfcEvent event) {
}
だから、今問題:
これら 2 つの部分は独立して正常に動作しますが、両方をアプリに追加するとうまくいきません。
つまり、最初の部分を追加すると、NDEF メッセージを受信したときにアプリが正しく起動されます。また、2 番目の部分のみを追加すると、アプリの実行中に自分のデバイスを他のデバイスにタップすると、Touch to beamインターフェイスが表示され、NDEF メッセージが送信されます。
問題は、両方を追加すると、他のデバイスをタップするとアプリが起動しますが、Touch to beamインターフェイスが表示されないことです。デバイスを切り離してもう一度タップすると、MainActivityが再起動されますが、メッセージを送信するオプションが表示されません。
どうすれば目的のシナリオを達成できますか?