Android 无法通过NFC发送NDEF消息
我想通过NFC从2台android设备发送/接收消息。但这对我不起作用 似乎当我靠近两部手机时,createNdefMessage不会被呼叫,信息也不会被传输。 当发送/接收两个设备屏幕都打开时。 应用程序正在运行&甚至我触摸了设备的屏幕 我尝试了很多方法来解决这个问题,但是没有结果! 我在哪里犯了错误Android 无法通过NFC发送NDEF消息,android,nfc,Android,Nfc,我想通过NFC从2台android设备发送/接收消息。但这对我不起作用 似乎当我靠近两部手机时,createNdefMessage不会被呼叫,信息也不会被传输。 当发送/接收两个设备屏幕都打开时。 应用程序正在运行&甚至我触摸了设备的屏幕 我尝试了很多方法来解决这个问题,但是没有结果! 我在哪里犯了错误 公共类NFCActivity扩展了AppCompativity 实现NfcAdapter.OnNdefPushCompleteCallback, NfcAdapter.Create
公共类NFCActivity扩展了AppCompativity
实现NfcAdapter.OnNdefPushCompleteCallback,
NfcAdapter.CreateNdefMessageCallback{
专用NfcAdapter mNfcAdapter;
private ArrayList messagesToSendArray=new ArrayList();
private ArrayList messagesReceivedArray=new ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u nfc);
mNfcAdapter=NfcAdapter.getDefaultAdapter(此);
if(mNfcAdapter!=null&&mNfcAdapter.isEnabled()){
mNfcAdapter.setNdefPushMessageCallback(this,this);
mNfcAdapter.setOnNdefPushCompleteCallback(this,this);
}否则{
Toast.makeText(此“NFC在此设备上不可用”,
吐司。长度(短)。show();
}
}
公共void addMessage(视图){
字符串newMessage=txtBoxAddMessage.getText().toString();
messagestosendary.add(newMessage);
txtBoxAddMessage.setText(null);
updateTextViews();
}
@凌驾
公共NdefMessage createNdefMessage(NfcEvent事件){
if(messagesToSendArray.size()==0)
返回null;
NdefRecord[]recordsToAttach=createRecords();
返回新的NdefMessage(recordsToAttach);
}
公共NdefRecord[]创建记录(){
NdefRecord[]记录=新的NdefRecord[messagesToSendArray.size()+1];
if(Build.VERSION.SDK\u INT
<uses-permission android:name="android.permission.NFC" />
<uses-feature
android:name="android.hardware.nfc"
android:required="true" />
<activity android:name=".NFCActivity"
android:label="@string/app_name"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
public class NFCActivity extends AppCompatActivity
implements NfcAdapter.OnNdefPushCompleteCallback,
NfcAdapter.CreateNdefMessageCallback {
private NfcAdapter mNfcAdapter;
private ArrayList<String> messagesToSendArray = new ArrayList<>();
private ArrayList<String> messagesReceivedArray = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_nfc);
mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (mNfcAdapter != null && mNfcAdapter.isEnabled()) {
mNfcAdapter.setNdefPushMessageCallback(this, this);
mNfcAdapter.setOnNdefPushCompleteCallback(this, this);
} else {
Toast.makeText(this, "NFC not available on this device",
Toast.LENGTH_SHORT).show();
}
}
public void addMessage(View view) {
String newMessage = txtBoxAddMessage.getText().toString();
messagesToSendArray.add(newMessage);
txtBoxAddMessage.setText(null);
updateTextViews();
}
@Override
public NdefMessage createNdefMessage(NfcEvent event) {
if (messagesToSendArray.size() == 0)
return null;
NdefRecord[] recordsToAttach = createRecords();
return new NdefMessage(recordsToAttach);
}
public NdefRecord[] createRecords() {
NdefRecord[] records = new NdefRecord[messagesToSendArray.size() + 1];
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
for (int i = 0; i < messagesToSendArray.size(); i++) {
byte[] payload = messagesToSendArray.get(i).getBytes(Charset.forName("UTF-8"));
NdefRecord record = new NdefRecord(
NdefRecord.TNF_WELL_KNOWN,
"http://developer.android.com/index.html".getBytes(Charset.forName("UTF-8")),
new byte[0],
payload);
records[i] = record;
}
} else {
for (int i = 0; i < messagesToSendArray.size(); i++) {
byte[] payload = messagesToSendArray.get(i).
getBytes(Charset.forName("UTF-8"));
NdefRecord record = NdefRecord.createMime("application/vnd.com.example.android.beam", payload);
records[i] = record;
}
}
records[messagesToSendArray.size()] = NdefRecord.createApplicationRecord(getPackageName());
return records;
}
@Override
public void onNdefPushComplete(NfcEvent event) {
messagesToSendArray.clear();
}
private void handleNfcIntent(Intent intent) {
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
Parcelable[] receivedArray = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
if (receivedArray != null) {
updateTextViews();
} else {
Log.i(TAG, "Received Blank Parcel");
}
}
}
@Override
public void onNewIntent(Intent intent) {
setIntent(intent);
handleNfcIntent(intent);
}
@Override
public void onResume() {
super.onResume();
updateTextViews();
handleNfcIntent(getIntent());
}
}