0
를 전송
내 활동은 내가, 내가NFC 잘못 태그/기록
@Override
public NdefMessage createNdefMessage(NfcEvent event) {
Log.d(TAG, "Creating massage");
String text = TAG + DATA_SPLITTER + ADDRESS + DATA_SPLITTER
+ USER_NAME;
// Nachricht vorbereiten.
// String text = "Hello NFC World!";
NdefRecord record = new NdefRecord(NdefRecord.TNF_MIME_MEDIA,
MIME_TYPE.getBytes(), new byte[0], text.getBytes());
NdefRecord[] records = { record };
NdefMessage msg = new NdefMessage(records);
return msg;
}
를 오버라이드 (override) 한
mNfcAdapter.setNdefPushMessageCallback(this, this);
// Register callback to listen for message-sent success
mNfcAdapter.setOnNdefPushCompleteCallback(this, this);
를 호출하고있어하지만 수신있을 때
CreateNdefMessageCallback, OnNdefPushCompleteCallback
를 구현한다 다른 레코드를 얻으십시오. 둘 중 하나는 응용 프로그램을 검색 할 시장 uri이고, 하나는 java 패키지 이름입니다 (아마도). 이 전에는 enableForegroundNdefPush ... 등을 사용했습니다. 콜백 없이도 두 장치 모두에서 푸시 완료를 처리해야합니다.이 방법으로 변경했는데 이제는 수행합니다. 더 이상 내 데이터를 제대로 전송하지 못합니다.
는 편집 :
는 잘 이해할 수 있도록하려면
public class NfcActivity extends Activity implements CreateNdefMessageCallback,
OnNdefPushCompleteCallback {
// ================================ Member =================================
// Speichert den NFC Adapter.
private NfcAdapter mNfcAdapter = null;
private boolean retryChannel = false;
public static final String TAG = "NfcActivity";
private static final String DATA_SPLITTER = "__:DATA:__";
private static final String MIME_TYPE = "application/my.applications.mimetype";
private String ADDRESS = null;
private String USER_NAME = null;
// Speichert das Intent, welches von Android mit erkannten Tags gefüllt
// und an die Activity weitergeleitet wird.
private PendingIntent mNfcPendingIntent = null;
private static final String LOG_TAG = "NfcActivity";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ADDRESS = "Something";
USER_NAME = "Someone";
// Zugriff auf den NFC Adapter erhalten.
mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
mNfcAdapter.setNdefPushMessageCallback(this, this);
mNfcAdapter.setOnNdefPushCompleteCallback(this, this);
Intent intent = new Intent(this, getClass());
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
mNfcPendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
}
@Override
protected void onNewIntent(Intent intent) {
if (!NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
return;
}
// Nutzdaten des Intent auslesen.
Parcelable[] rawMsgs = intent
.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
if (rawMsgs == null) {
return;
}
for (int i = 0; i < rawMsgs.length; ++i) {
NdefMessage msg = (NdefMessage) rawMsgs[i];
NdefRecord[] records = msg.getRecords();
for (NdefRecord record : records) {
String text = new String(record.getPayload());
// this one has the wrong content. I receive two records, one for the market, one with java packet name (or something)
}
}
}
@Override
protected void onResume() {
super.onResume();
// activate receiving of messages
mNfcAdapter.enableForegroundDispatch(this, mNfcPendingIntent, null,
null);
}
@Override
protected void onPause() {
super.onPause();
// deactivate receiving
mNfcAdapter.disableForegroundDispatch(this);
}
private void logError(String msg) {
Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
Log.v(LOG_TAG, msg);
}
@Override
public void onNdefPushComplete(NfcEvent arg0) {
Log.d(TAG, "Push complete");
}
@Override
public NdefMessage createNdefMessage(NfcEvent event) {
Log.d(TAG, "Creating massage");
String text = "asdfgh";
// Nachricht vorbereiten.
// String text = "Hello NFC World!";
NdefRecord record = new NdefRecord(NdefRecord.TNF_MIME_MEDIA,
MIME_TYPE.getBytes(), new byte[0], text.getBytes());
NdefRecord[] records = { record };
NdefMessage msg = new NdefMessage(records);
return msg;
}
}
Manifest 내에서 활동에 대해 정의한 내용은 무엇입니까? –
<의도 필터> \t \t \t <동작 로이드 이름 = "android.nfc.action.NDEF_DISCOVERED"/> \t \t \t <카테고리 로이드 이름 = "android.intent.category.DEFAULT"/> \t \t \t \t \t intent-filter> – damian
음, 알 수 있습니다. text/plain. 그래서 내가 NdefMessages를받지 못하는 이유가 무엇일까요? 물론 – damian