2012-08-03 50 views
3

我在标签(NFC切换wifi)记录类型上写入“application/vnd.wfa.wsc”记录。 现在我想用扫描标签的给定活动开始我的应用程序。NFC意图过滤器Android - 匹配应用程序/ vnd.wfa.wsc记录

我做了以下内容:

我将此写在标签:

NdefRecord.createApplicationRecord("at.nfc.wifi"); (包名)

现在通过扫描标签,亚行logcat让我看到以下内容:

... 
I/ActivityManager( 252): START {flg=0x10008000 cmp=com.android.nfc/.NfcRootActivity (has extras) u=0} from pid 479 
I/NfcDispatcher( 479): matched AAR to NDEF 
W/IntentResolver( 252): resolveIntent failed: found match, but none with Intent.CATEGORY_DEFAULT 
I/ActivityManager( 252): START {act=android.nfc.action.NDEF_DISCOVERED pkg=at.nfc.wifi (has extras) u=0} from pid 479 
W/InputMethodManagerService( 252): Window already focused, ignoring focus gain of: [email protected] attribute=null 

在这里清单:

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

    <uses-sdk android:minSdkVersion="14" /> 
    <uses-feature 
     android:name="android.hardware.nfc" 
     android:required="true" /> 
    <uses-permission android:name="android.permission.NFC" /> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <activity 
      android:name=".activities.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.nfc.action.NDEF_DISCOVERED" /> 
       <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" /> 
       <data android:mimeType="application/vnd.wfa.wsc" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".activities.NFCWriterActivity"></activity> 
     <activity android:name=".activities.NFCReaderActivity"></activity> 
     <activity android:name=".activities.WifiManagerActivity"></activity> 
     <activity android:name=".activities.WifiConfiguratorActivity"></activity> 
     <activity android:name=".activities.TagWriterOptionsActivity"></activity> 
     <activity android:name=".activities.WifiScannerTagActivity"></activity> 
     <activity android:name=".activities.WifiScannerActivity"></activity> 

    </application> 

</manifest> 

的功能的onResume:

@Override 
protected void onResume() { 
    super.onResume(); 
    Intent intent = new Intent(this, this.getClass()); 
    intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0); 
    nfcAdapter.enableForegroundDispatch(this, pendingIntent, null, null); 
} 

所以我想什么是我扫描标签,然后at.nfc.wifi.activities.NFCReaderActivity应该开始。

首先adb logcat说: W/IntentResolver(252):resolveIntent失败:找到匹配,但没有与Intent.CATEGORY_DEFAULT 这是什么意思?

第二,我可以匹配应用程序/ vnd.wfa.wsc记录类型吗?或者我该怎么做,我的t.nfc.wifi.activities.NFCReaderActivity通过扫描标签开始。

谢谢你的提示:)


编辑: 现在我的应用程序启动:

<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" /> 
     <action android:name="at.nfc.wifi.activities.NFCReaderActivity" /> 


     <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 

是不是说,如果我想开始一个子活动不是主要的应用,我必须检查启动活动if(getIntent()。getAction()。equals(NfcAdapter.ACTION_NDEF_DISCOVERED)),然后启动它? 我可以过滤这个特殊的应用程序/ wsc ...记录吗?

THX

回答

0

只需删除从第一(原始)意图过滤的<action android:name="android.nfc.action.NDEF_DISCOVERED" />。我认为应该修复“application/vnd.wfa.wsc”MIME类型的匹配。

您应该将第二个意向过滤器添加到您希望在收到此类意向时启动的活动的活动声明中。所以例如将其移至“.activities.NFCReaderActivity”部分。

相关问题