2012-06-05 3 views
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; 
} 

} 
+0

Manifest 내에서 활동에 대해 정의한 내용은 무엇입니까? –

+0

<의도 필터> \t \t \t <동작 로이드 이름 = "android.nfc.action.NDEF_DISCOVERED"/> \t \t \t <카테고리 로이드 이름 = "android.intent.category.DEFAULT"/> \t \t \t \t \t damian

+0

음, 알 수 있습니다. text/plain. 그래서 내가 NdefMessages를받지 못하는 이유가 무엇일까요? 물론 – damian

답변

1

당신이 그것을 받아 들일 수, 당신이 대답을 게시 할 수 있습니다.

해결 방법은 안드로이드 매니페스트 안의 잘못된 Mime-Type입니다. NdefRecord 정의와 동일해야합니다.