2015-05-17 62 views
4

我想通過掃描包含Android Application Record的NFC標籤來啓動我的應用程序。但是,這個應用程序不應該有一個啓動器圖標,所以我不能使用CATEGORY_LAUNCHER如何通過掃描NFC標籤啓動沒有啓動器圖標的應用程序?

我的問題是,如果我在清單中註釋掉CATEGORY_LAUNCHER線,應用程序不再被推出(上谷歌進行搜索播放代替):

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="app.my"> 

    <application android:label="@string/app_name"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <!--<category android:name="android.intent.category.LAUNCHER" />--> 
      </intent-filter> 
     </activity> 
    </application> 
</manifest> 

我也嘗試添加以下意圖過濾但沒有運氣:

<intent-filter> 
    <action android:name="android.nfc.action.NDEF_DISCOVERED" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:mimeType="text/plain" /> 
</intent-filter> 

我應該怎麼做才能使它工作?我應該在MainActivity中添加代碼以處理NDEF_DISCOVERED意圖?

+0

你檢查此鏈接: - [點擊這裏](https://developer.android。com/guide/topics/connectivity/nfc/nfc.html#aar) – Pankaj

+0

@Clairvoyant是的,這是我在我的問題中指出的鏈接。但是它並沒有解釋AAR工作清單中的「活動」究竟應該是什麼。 –

+0

你確實知道這是可能的嗎?無法從啓動程序啓動的應用程序聽起來像系統會妨礙您執行的操作。也許你可以檢查你需要的數據,如果不存在,那麼向用戶彈出一條有用的消息並調用'finish()'。 – nasch

回答

1

執行此操作的典型方法是除了Android應用程序記錄(AAR)之外,還向標記添加另一個記錄(MIME類型,NFC論壇外部類型或URI)。在這種情況下,AAR必須是標籤上NDEF消息的最後(或至少不是第一個)記錄。

然後可以捕獲由該特定數據類型的過濾使用NDEF_DISCOVERED意圖過濾的標籤發現(即與代碼中NDEF消息的第一記錄的類型)。例如。對於NFC論壇外部類型:

<activity android:name=".MainActivity"> 
    <intent-filter> 
     <action android:name="android.nfc.action.NDEF_DISCOVERED" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <data android:scheme="vnd.android.nfc" 
       android:host="ext" 
       android:pathPrefix="/yourdomain.com:yourtypename"/> 
    </intent-filter> 
</activity> 

在這種情況下,AAR將確保您的應用得到優先於註冊了相同類型和Play商店的運行結束你的應用程序,如果它不是任何其他應用已安裝。

如果你不註冊一個匹配NDEF_DISCOVERED意圖過濾器的任何活動時,AAR會造成具有MAIN/LAUNCHER意圖過濾器(在這種情況下,Android將不是一個句柄傳遞到標籤,就可以活動的第一個活動雖然)。因此,如果您既不註冊NDEF_DISCOVERED意圖,也不註冊MAIN/LAUNCHER意圖,則AAR機制將不起作用。

但是,如果您希望您的標籤僅包含包含AAR而沒有其他記錄?

您可以通過爲AAR註冊一個意圖過濾器來實現這一點。該AAR是NFC論壇外部類型與類型名稱爲「urn:NFC:EXT:android.com:pkg」,這樣你就可以使用下面的意圖過濾器:

<intent-filter> 
    <action android:name="android.nfc.action.NDEF_DISCOVERED" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:scheme="vnd.android.nfc" android:host="ext" 
      android:pathPrefix="/android.com:pkg" /> 
</intent-filter> 
1

我得到它通過在intent-filter設置自定義mimeType工作,像這樣:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="app.my"> 

    <application android:label="@string/app_name"> 
     <activity android:name=".MainActivity"> 
      <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.NDEF_DISCOVERED" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <data android:mimeType="application/vnd.app.my" /> 
      </intent-filter> 
     </activity> 
    </application> 
</manifest> 

然後創建一個NdefRecord到在與標籤寫:

NdefRecord.createMime("application/vnd.app.my", null); 

這還不根據我的理解,AAR的優勢在於應用程序級別(而不是活動級別),並確保只有我的應用程序可以啓動。但我想這樣的自定義MIME類型已經足夠好了。

相關問題