2012-10-23 1 views
-1

저는 Developers android입니다. onCreate에서이 코드를 사용하는 방법 주요 활동 NFC Tag를 터치하면 Data를 읽습니다. 내가 읽기 태그에 대한 흐름 코드를 사용하여 문제를 해결하기 위해 그것을 어떻게 변경합니까? 당신이 응용 프로그램은 응용 프로그램이 실행되는 경우에만 태그에 따라 행동하려는 경우NFC 태그 사용 방법 ACTION_TECH_DISCOVERED 주요 활동 은요?

in manifest 

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="example.Ultralight" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <uses-permission android:name="android.permission.NFC" /> 
    <uses-sdk android:minSdkVersion="10" /> 
    <uses-feature android:name="android.hardware.nfc" android:required="true" /> 

    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true"> 
     <activity android:name="MainView" 
        android:label="@string/app_name"> 
      <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.TECH_DISCOVERED"/> 
      </intent-filter> 
       <meta-data android:name="android.nfc.action.TECH_DISCOVERED" 
       android:resource="@xml/tech_filter"/> 
     </activity> 

    </application> 
</manifest> 
+1

문제의 의미를 다시 말씀해 주시겠습니까? – RvdK

+0

내 휴대 전화를 터치하고 싶습니다. NFC 태그가 내 앱을 실행하지 않습니다 .when 사용자가 입력 한 다음 NFC 태그 터치 데이터를 터치하십시오. – amin

+0

질문에 대한 답변은 Android 개발자 사이트에 있습니다. 당신이해야 할 일은 그것을 읽는 것뿐입니다. 또는 다른 검색 SO - 화제가 달려 된 여러 번 –

답변

2

는, 당신은 당신에서 OnCreate에서 텐트 필터를 설정하고 행동해야합니다. 이 같은.

업데이트 : 코드가 추가되었습니다.

NfcAdapter mAdapter; 
private PendingIntent mPendingIntent; 
private IntentFilter[] mFilters; 
private String[][] mTechLists; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.fbintenthandler); 

    mAdapter = NfcAdapter.getDefaultAdapter(this); 
    mPendingIntent = PendingIntent.getActivity(this, 0, 
      new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); 

    IntentFilter ntech2 = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED); 
    IntentFilter ntech3 = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED); 

    mFilters = new IntentFilter[] { 
      ntech3, ntech2, 
    }; 

    mTechLists = new String[][] { new String[] { 
      NfcA.class.getName(), 
      Ndef.class.getName() } }; 

    Intent intent = getIntent(); 
    resolveIntent (intent); 

} 

@Override 
protected void onNewIntent(Intent intent) { 
    super.onNewIntent(intent); 
    resolveIntent(intent); 
} 

private void resolveIntent (Intent intent) 
{ 
    String action = intent.getAction(); 
    if ((NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) || 
      (NfcAdapter.ACTION_TECH_DISCOVERED.equals(action))) 
    { 
     Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 

     Parcelable[] rawMsgs = intent 
       .getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); 
     NdefMessage msg = (NdefMessage) rawMsgs[0]; 

     extractMessage(msg); 

    } 
} 

private void extractMessage(NdefMessage msg) { 
    byte[] array = null; 
    array = msg.getRecords()[0].getPayload(); 
    String displaystring = convert (array); 

    TextView tv = (TextView) findViewById(R.id.txt_DisplayData); 
    tv.setText(displaystring); 
} 

String convert(byte[] data) { 
    StringBuilder sb = new StringBuilder(data.length); 
    for (int i = 0; i < data.length; ++ i) { 
     if (data[i] < 0) throw new IllegalArgumentException(); 
     sb.append((char) data[i]); 
    } 
    return sb.toString(); 
} 
+0

문자열 [] [] \t \t \t \t mTechLists \t는 = 새로운 String [] [] {새로운 String [] {MifareUltralight.class.getName()}} \t, 내가 사용 이 코드, 변경 방법 – amin

+0

나는 당신이 원하는 것이 확실하지 않습니다. MFM을 추가하기 위해 mTechLists 변수를 수정했습니다. – Joseph

+0

모든 코드를 넣을 수 있습니까? – amin