적합한 인 텐트 필터 요구 사항을 반영하기 위해 내 매니페스트 코드와 내 액티비티 코드를 다시 편집했습니다. 그러나 나는 여전히 같은 결과를 얻고 있습니다. 내 외부 기록을 읽을 수 없으며 그 이유를 모르겠습니다. NFC 도구 앱으로 태그를 스캔 할 때 예상대로 모든 것을 볼 수 있습니다. 내 배열을 "읽으려고"할 때 내 코드가 NullPointer를 생성하며 왜 그럴 수 있습니까?NFC 태그에서 배열/페이로드 읽기?
-------------- --------------------
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.bmt_01">
<uses-permission android:name="android.permission.NFC"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-sdk android:minSdkVersion="15"/> ///must be changed in build.gradle.
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data
android:scheme="vnd.android.nfc"
android:host="ext"
android:pathPrefix="/com.example.bmt_01:externaltype"
/>
</intent-filter>
</activity>
</application>
</manifest>
을 MANIFEST를 BEGIN --- ----------- 끝 매니페스트 --------------------
------------- -BEGIN 주요 활동 -------------
package com.example.bmt_01;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.nfc.tech.Ndef;
import android.nfc.tech.NdefFormatable;
import android.os.Parcelable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Locale;
public class MainActivity extends AppCompatActivity {
String currentPayload = "";
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onNewIntent(Intent intent)
{
Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
//added the below lines, can delete if they don't work.
NdefRecord payload = ((NdefMessage)rawMsgs[0]).getRecords()[0];
String currentPayload = new String(payload.getPayload());
if (currentPayload.equals("1"))
{
Toast.makeText(this, "NFC Scan1: " + currentPayload, Toast.LENGTH_SHORT).show();
String url = "http://www.google.com";
Intent l = new Intent(Intent.ACTION_VIEW);
l.setData(Uri.parse(url));
startActivity(l);
}
///else
///{
if (currentPayload.equals("2"))
{
Toast.makeText(this, "NFC Scan2: " + currentPayload, Toast.LENGTH_SHORT).show();
String url = "http://www.yahoo.com";
Intent l = new Intent(Intent.ACTION_VIEW);
l.setData(Uri.parse(url));
startActivity(l);
}
///}
}
protected void onResume()
{
super.onResume();
Toast.makeText(this, "NFC Scan3: ", Toast.LENGTH_SHORT).show();
enableForegroundDispatchSystem();
}
@Override
protected void onPause()
{
super.onPause();
disableForegroundDispatchSystem();
}
private void enableForegroundDispatchSystem() {
Toast.makeText(this, "NFC Scan4: ", Toast.LENGTH_SHORT).show();
}
private void disableForegroundDispatchSystem() {
Toast.makeText(this, "NFC Scan5: ", Toast.LENGTH_SHORT).show();
onNewIntent(getIntent());
}
}
-------------- END 주요 활동 --------- ------
업데이트 *
필자의 AAR 기능이 올바르게 추가되어야합니다. 위의 앱을 휴대 전화에 설치했지만 열지 않은 상태에서 내 AAR이 자동으로 열리고 테스트 태그를 스캔 할 때 애플리케이션이 실행됩니다. 그래서 배열에서 AAR을 "볼"수 있지만 외부 레코드는 볼 수 없습니다.
여전히 내 태그에서 외부 레코드를 읽을 수 없습니다. 분명히 내가 뭔가 잘못하고있다. 그러나 나는 모른다.
어떤 문제가 발생 했습니까? 'NDEF_DISCOVERED' 의도를 얻었습니까? 앱 매니페스트에서 NDEF_DISCOVERED 인 텐트를 받기 위해 제대로 등록 했습니까? –
매니페스트가 올바르게 구성되어 있다고 생각합니다. 내 문제는 "payloadString"값을 캡처 할 수 없다는 것입니다. 배열을 잘못 읽고 있다고 생각합니다. "for"루프를 포기할 계획입니다. 본질적으로, 내가하려는 것은 외부 레코드를 읽고 해당 레코드의 가치에 해당하는 웹 사이트로 사용자를 보내는 것입니다. 즉 payloadString = 1 인 경우 www.yahoo.com으로 이동하십시오. payloadString = 2 인 경우 www.google.com으로 이동하십시오. – James
그러면 이전에 가지고 있던 코드가'payloadString'을 전달 했어야합니다 (매우 우아하고 효율적인 방법은 아니지만). "NFC Scan7 : ..."토스트 (업데이트 된 코드에서)를 얻었습니까? 'rawMsgs! = null'입니까? 'rawMsgs [0]! = null'입니까? –