我試圖在手機掃描NFC標籤時啓動特定活動。這就是我的清單看起來像:掃描NFC標籤時啓動特定活動
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.lgandroid.ddcnfc"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.NFC"/>
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="16" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.lgandroid.ddcnfc.BluePrintActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
<data android:mimeType="application/com.lgandroid.ddcnfc"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<activity
android:name="com.lgandroid.ddcnfc.LoginActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.lgandroid.ddcnfc.MainActivity"
android:label="@string/app_name" >
</activity>
<activity
android:name="com.lgandroid.ddcnfc.PointDiagnosisActivity"
android:label="@string/app_name" >
</activity>
<activity
android:name="com.lgandroid.ddcnfc.PointControlActivity"
android:label="@string/app_name" >
</activity>
<activity
android:name="com.lgandroid.ddcnfc.SystemDiagnosisActivity"
android:label="@string/app_name" >
</activity>
<activity android:name="com.lgandroid.ddcnfc.SettingsActivity" android:label="@string/app_name"></activity>
</application>
每當我掃描我的標籤,我的主要活動發佈會,但我想我的BluePrintActivity推出。我不確定爲什麼會出現這種情況。這裏是我寫標籤代碼:
private boolean writeTag(Tag tag) {
NdefRecord appRecord = NdefRecord.createApplicationRecord("com.lgandroid.ddcnfc");
NdefMessage message = new NdefMessage(new NdefRecord[] { appRecord });
try {
// see if tag is already NDEF formatted
Ndef ndef = Ndef.get(tag);
if (ndef != null) {
ndef.connect();
if (!ndef.isWritable()) {
nfcTextView.setText("Read-only tag.");
return false;
}
// work out how much space we need for the data
int size = message.toByteArray().length;
if (ndef.getMaxSize() < size) {
nfcTextView.setText("Tag doesn't have enough free space.");
return false;
}
ndef.writeNdefMessage(message);
nfcTextView.setText("Tag written successfully.");
return true;
} else {
// attempt to format tag
NdefFormatable format = NdefFormatable.get(tag);
if (format != null) {
try {
format.connect();
format.format(message);
nfcTextView.setText("Tag written successfully!\nClose this app and scan tag.");
return true;
} catch (IOException e) {
nfcTextView.setText("Unable to format tag to NDEF.");
return false;
}
} else {
nfcTextView.setText("Tag doesn't appear to support NDEF format.");
return false;
}
}
} catch (Exception e) {
nfcTextView.setText("Failed to write tag");
}
return false;
}
編輯:上面我接受的答案暗示我朝着正確的方向,但因爲我在寫標籤,在接受的答案代碼是不完全正確的解決方案。如果你正在寫標籤,這是你需要做什麼:
NdefRecord appRecord = new NdefRecord(
NdefRecord.TNF_MIME_MEDIA ,
"application/com.lgandroid.ddcnfc".getBytes(Charset.forName("US-ASCII")),
new byte[0], new byte[0]);
NdefMessage message = new NdefMessage(new NdefRecord[] { appRecord });
如果你想存儲的有效載荷,只需更換最後一個參數「新的字節[0]」,以適當的數據。
這很奇怪,因爲根據這裏的文檔(http://developer.android.com/guide/topics/connectivity/nfc/nfc.html),它表示Android會嘗試運行具有匹配的意圖過濾器。我猜Android的文檔可能不在這裏。當我今晚回到家時,我會試試這個。 – l46kok
您對意向過濾器是真實的,但您當前創建的標記是Android應用程序記錄,而不是您正在過濾的Mime記錄。基本上,您沒有針對您目前正在撰寫的標籤的意圖過濾器。但是因爲它是Android應用程序記錄,所以應用程序仍然啓動。 –