2014-12-10 3 views
1

У меня есть приложение, которое сканирует теги NFC, собирает данные из тега и отправляет эти данные на сервер. Данные о теге представлены в следующем формате:Сканирование NFC-тегов запускает только мое приложение для запуска

1,3,30012,somebodys name 

Эти теги размещаются в домах клиента для лиц, осуществляющих уход. Каждое сканирование записывает их в вызов.

Это работает до сих пор. Проблема, с которой я сталкиваюсь сейчас, заключается в том, что лица, осуществляющие уход, должны использовать другое приложение вместе с нашим приложением, которое сканирует другой тег NFC с разными данными на нем и отправляет его на другой сервер. Это приложение установлено на телефоне одного и того же опекуна.

Это другое приложение будет сканировать теги NFC, которые могут иметь данные о нем в следующем формате:

abc|123?? 

Вопрос в том, как я могу гарантировать, что, когда сиделка сканирует наш тег, только наше приложение запускается?

Есть ли способ в манифесте указать это в фильтрах намерений для моего приложения?

Это то, что у меня есть в манифесте для моей деятельности. Я понимаю, что если Intent запущен и есть 2 приложения, которые могут обрабатывать тэг NFC, тогда пользователю предоставляется список. Android-документы препятствуют этому.

Заранее спасибо.

[Изменить] Одна вещь, которую я заметил, если телефон находится на главном экране и я сканирую тег, то мое приложение запускается. Это нормально, если опекун сканирует правильный тег.

<activity android:name=".NfcscannerActivity" 
    android:screenOrientation="portrait" > 
    <intent-filter> 
     <action android:name="android.nfc.action.NDEF_DISCOVERED" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <data android:mimeType="text/plain" /> 
    </intent-filter> 
    <intent-filter> 
     <action android:name="com.carefreegroup.rr3.QRCODE_ACTION" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <data android:mimeType="text/plain" /> 
    </intent-filter> 
    <intent-filter> 
     <action android:name="android.nfc.action.TECH_DISCOVERED" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
    <meta-data 
     android:name="android.nfc.action.TECH_DISCOVERED" 
     android:resource="@xml/nfc_tech_filter" /> 
</activity> 

ответ

2

Вы можете создать собственный mimeType в своем сообщении NDEF, а затем создать фильтр намерений, который точно соответствует ему. Это означало бы, что ваше приложение будет запущено, так как это самый конкретный фильтр.

Пример:

<intent-filter> 
    <action android:name="android.nfc.action.NDEF_DISCOVERED" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:mimeType="application/vnd.com.my.app.package.customString" /> 
</intent-filter> 

Edit: Кроме того, если вы не можете создать пользовательскую MIMETYPE то, возможно, ваша утилита будет создать пользовательский URL? Затем вы можете создать фильтр для настраиваемого url:

<intent-filter> 
      <action android:name="android.nfc.action.NDEF_DISCOVERED" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <data 
       android:scheme="http" 
       android:host="www.mywebsite.net" 
       android:path="/customPathForAction" /> 
</intent-filter> 
+0

Хорошо спасибо. В момент создания тегов я записываю данные в тег с помощью приложения tagwriter и указываю «Обычный текст». Как мне написать mimetype в тег, чтобы мое приложение могло фильтровать для него? – turtleboy

+0

Вы можете попробовать приложение «Инструменты NFC». Это позволяет создавать пользовательские типы. – corvairjo

+0

@corvairjo Привет, я загрузил приложение, но это не очевидно, как это сделать. Я нажимаю на Data-add custom record. Затем в приложении типа содержимого добавьте/vnd.com.my.app.package.customString? – turtleboy

Смежные вопросы