Я хотел бы создать одно конкретное приложение NFC среди нескольких других приложений NFC, которое должно иметь следующие возможности
1. Приложение должно запускаться только тогда, когда на устройстве сканируется метка NFC с определенным текстом (тип NDEF). (Это означает, что мое приложение не должно отображаться, если нажаты какие-либо другие теги с текстовым типом)
- При запуске приложения не должно быть опции «Завершить действие с помощью» и списка всех приложений NFC в устройстве.
Здесь я реализовал систему диспетчеризации переднего плана, но в ней перечислены только все приложения NFC с приоритетом NDEF_DISCOVERED.
Фрагмент кода для файла манифеста выглядит следующим образом:
<activity android:name=".NFCDiscovered" android:label="@string/app_name">
<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>
</application>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.NFC" />
<uses-feature android:name="android.hardware.nfc" android:required="true" />
Здесь NFCDiscovered.java заботится о чтении тега NFC определенного текстового типа с помощью системы диспетчеризации переднего плана. Фрагмент кода для этого как:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.nfcreader);
mAdapter = NfcAdapter.getDefaultAdapter(this);
mPendingIntent = PendingIntent.getActivity(this, 0,new
Intent(this,getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
try {
ndef.addDataType("text/plain");
} catch (MalformedMimeTypeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mFilters = new IntentFilter[] { ndef };
//resolveIntent(getIntent());
}
public void onResume() {
super.onResume();
// TODO Auto-generated method stub
TextView myText= (TextView)findViewById(R.id.nfcTxt);
super.onResume();
if (mAdapter != null)
mAdapter.enableForegroundDispatch(this, mPendingIntent,
mFilters,null);
}
protected void onNewIntent(Intent intent) {
NdefMessage[] msgs = null;
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())){
Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
if (rawMsgs != null) {
msgs = new NdefMessage[rawMsgs.length];
for (int i = 0; i < rawMsgs.length; i++) {
msgs[i] = (NdefMessage) rawMsgs[i];
}
}
}
List<TextRecord> records = NdefMessageParser.parse(msgs[0]);
String text = null;
for(TextRecord local:records)
{
text = local.getText();
}
//myText.setText("text :"+msgs);
}
public void onPause() {
super.onPause();
if (mAdapter != null) mAdapter.disableForegroundDispatch(this);
}
Было бы здорово, если бы кто-нибудь сказал мне, что мне не хватает.
Заранее спасибо.