2015-05-18 48 views
1

是否可以在使用NFC標籤的應用中啓動特定活動?通過NFC標籤開始特定活動

我想開始一個名爲MainMap的活動,它不是主要活動。 我試過使用標籤編寫器來編寫啞劇記錄,但仍然失敗。

這裏的清單:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.km.parkit" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-permission android:name="android.permission.NFC" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> 
<uses-permission android:name="android.permission.INTERNET" /> 

<uses-feature 
    android:name="android.hardware.nfc" 
    android:required="true" /> 

<uses-sdk 
    android:minSdkVersion="14" 
    android:targetSdkVersion="21" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".MainActivity" 
     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=".MainMap" 
     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="application/com.km.ParkIT" /> 
     </intent-filter> 

     </activity> 

    <activity 
     android:name="com.km.parkit.parka" 
     android:label="@string/app_name" /> 

    <activity 
     android:name="com.km.parkit.parkb" 
     android:label="@string/app_name" /> 

    <activity 
     android:name="com.km.parkit.parkc" 
     android:label="@string/app_name" /> 

    <activity 
     android:name="com.km.parkit.parkd" 
     android:label="@string/app_name" /> 


    <!-- Google Maps API Key --> 
<meta-data 
    android:name="com.google.android.maps.v2.API_KEY" 
    android:value="AIzaSyBf-0hUDrDTK-NOveZrnT8wec5TTTLqjAw" /> 

<meta-data 
    android:name="com.google.android.gms.version" 
    android:value="@integer/google_play_services_version" /> 

</application> 



</manifest> 

我寫的MIME類型 「application/com.km.parkit」 到使用https://github.com/balloob/Android-NFC-Tag-Writer

缺少什麼我在這裏NFC標籤?

哦,我的問題是,當我點擊NFC標籤時,該應用並沒有開始,當我點擊標籤時,它會顯示通常的彈出框,顯示我可以用來訪問NFC標籤的程序或讀取數據,即NFC標籤信息和收集的新標籤。

+0

您是否嘗試過使用'application/com.km.parkit'(小寫)更改意圖過濾器中的mimeType? –

+0

嘗試在intent-filter操作中添加'android.nfc.action.TECH_DISCOVERED'和'android.nfc.action.TAG_DISCOVERED'。 –

+0

是的,它必須小寫,謝謝布魯諾! :D 我不想使用TECH_DISCOVERED,因爲我希望應用程序成爲NFC標籤啓動的重中之重:) –

回答

2

的NDEF_DISCOVERED意圖過濾器應選用全小寫的MIME類型名稱(這也是你應該如何存儲標籤上的型號名稱):

<intent-filter> 
    <action android:name="android.nfc.action.NDEF_DISCOVERED" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:mimeType="application/com.km.parkit" /> 
</intent-filter> 

的問題是,MIME類型病例根據RFC不敏感,而Android的意圖過濾器匹配區分大小寫。因此,在Android上處理MIME類型記錄的幫助器方法會自動將類型名稱轉換爲小寫字母,因此您只應將所有小寫字母用於MIME類型名稱。

例如,使用該方法NdefRecord.createMime()用混合的情況下類型名稱將總是導致成創建一個小寫僅MIME類型名稱:

NdefRecord r1 = NdefRecord.createMime("application/ThisIsMyMIMEType", ...); 
NdefRecord r2 = NdefRecord.createMime("application/thisismymimetype", ...); 

都將導致成創建相同的MIME類型記錄類型:

+----------------------------------------------------------+ 
| MIME:application/thisismymimetype | ...     | 
+----------------------------------------------------------+ 
+0

Ahahaha!傻我!我忘記了關於清單的所有內容,而且我只是擺弄標籤本身!謝謝,你是一個很大的幫助:D –