我知道这是StackOverflow上的一个多余问题,但我尝试了很多我找到的答案,但没有一个能够奏效。我想在按下按钮时发送消息,但是当我在片段中调用我的nfc写入功能时,我将NDEF_Discovered放在AndroidManifest.xml中。 intent.getParcelableExtra( NfcAdapter.EXTRA_TAG )
返回null,我找不到原因。这是我的代码:
<activity
android:name="com.iiil.cccdm.ebar.gui.activity.MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
</intent-filter>
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
<action android:name="android.nfc.action.TAG_DISCOVERED"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/*"/>
</intent-filter>
</activity>
View rootView = inflater.inflate( R.layout.consommer_fragment, container, false );
ImageButton btn = (ImageButton) rootView.findViewById( R.id.drinkButton );
btn.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick( View v ) {
Toast.makeText( getActivity(), "in listener", Toast.LENGTH_LONG );
// Recupération de l'id
UserData userData = new UserData( getActivity() );
Integer idUser = userData.getId();
Intent intent = this.getActivity().getIntent();
if ( intent == null ) {
Log.e( this.getClass().getSimpleName(), "INTENT NULL" );
}
NFCTransfer nfcTransfer = NFCTransfer.getInstance( getActivity() );
// TODO : Test avec Yohan et améliorer.
nfcTransfer.writeToDevice( idUser.toString(), intent );
}
} );
public void writeToDevice( String msgToWrite, Intent intent ) {
Tag tag = intent.getParcelableExtra( NfcAdapter.EXTRA_TAG );
if ( tag == null ) {
Log.e(this.getClass().getSimpleName(), "tag == null");
Toast.makeText( context, "No Tag. Waiting...", Toast.LENGTH_LONG )
.show();
return;
}
Ndef ndefref = Ndef.get( tag );
/* ... the rest of the function is useless since tag is null*/
}
答案 0 :(得分:1)
您还没有描述您希望应用程序如何处理NFC卡,因为有几种可能的情况:
根据您提供的信息,您可能还应该监听TECH_DISCOVERED意图并将技术列表元数据块添加到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" />
另外,请参阅this获取示例技术列表(即您的应用应处理哪种类型的NFC技术)。
_
@Override
protected void onNewIntent(Intent intent) {
Tag nfcTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
if (nfcTag == null) {
Log.w(LOG_TAG, "Unable to obtain NFC tag from intent!");
} else {
String tagId = bytesToHex(nfcTag.getId());
...
}
另请注意,您可以使用foreground dispatch system直接从活动代码注册/取消注册NFC意图,而不是在AndroidManifest.xml中设置配置