Tôi đang cố gắng khởi chạy một hoạt động cụ thể khi điện thoại của tôi quét thẻ NFC. Đây là những gì biểu hiện của tôi trông giống như:Khởi chạy một hoạt động cụ thể khi quét thẻ 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>
Bất cứ khi nào tôi quét thẻ của tôi, ra mắt hoạt động chính của tôi nhưng tôi muốn BluePrintActivity tôi để khởi động. Tôi không chắc tại sao lại như vậy. Đây là mã của tôi để viết cho tag:
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;
}
Edit: Câu trả lời tôi chấp nhận ở trên gợi ý cho tôi hướng tới đúng hướng nhưng kể từ khi tôi đang viết cho một thẻ, mã trong câu trả lời được chấp nhận là không chính xác giải pháp đúng . Nếu bạn đang viết cho một thẻ, đây là những gì bạn cần làm:
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 });
Nếu bạn muốn lưu trữ một tải trọng, chỉ cần thay thế các tham số cuối cùng "byte mới [0]" vào tập dữ liệu thích hợp.
Điều này khá lạ, bởi vì theo tài liệu ở đây (http://developer.android.com/guide/topics/connectivity/nfc/nfc.html), nó nói rằng Android sẽ cố gắng chạy Hoạt động có bộ lọc ý định phù hợp. Tôi đoán tài liệu Android có thể bị tắt ở đây. Tôi sẽ cố gắng khi tôi về nhà tối nay. – l46kok
Bạn đúng về bộ lọc ý định nhưng thẻ bạn hiện đang tạo là Bản ghi ứng dụng Android thay vì Bản ghi Mime mà bạn hiện đang lọc. Về cơ bản bạn không có bộ lọc ý định cho thẻ bạn hiện đang viết. Nhưng bởi vì nó là một ứng dụng Android Record, ứng dụng vẫn còn bắt đầu. –