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
が再起動されますが、メッセージを送信するオプションが表示されません。
どうすれば目的のシナリオを達成できますか?