[英]getParcelableExtra return null NFC Tag
我知道這是StackOverflow上的一個多余問題,但是我嘗試了很多發現的答案,但都沒有用。 我想在按下按鈕時發送消息,但是在Fragment中調用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*/
}
由於存在幾種可能的情況,因此尚未描述您希望應用程序如何處理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" />
另外,請參閱此以獲取示例技術列表(即您的應用程序應處理哪種類型的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());
...
}
另外,請注意,您可以使用前台調度系統來直接從您的活動代碼注冊/注銷監聽NFC意圖,而不是在AndroidManifest.xml中設置配置
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.