我需要在手机阅读标签时选择我的活动。我的应用程序应该在活动选择器上可见。
在我的活动的清单文件中,我有
<activity android:name=".WaitingPayment" android:noHistory="true"
android:theme="@android:style/Theme.NoTitleBar"
android:screenOrientation="portrait" android:label="@string/app_name">
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<data android:mimeType="*/*" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
在活动课中我有:
nfcAdapter = NfcAdapter.getDefaultAdapter(this);
pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
try {
ndef.addDataType("*/*"); /* Handles all MIME based dispatches.
You should specify only the ones that you need. */
}
catch (MalformedMimeTypeException e) {
throw new RuntimeException("fail", e);
}
this.intentFiltersArray = new IntentFilter[] {ndef};
this.techListsArray = new String[][] { new String[] { MifareUltralight.class.getName(), Ndef.class.getName(), NfcA.class.getName()}};
我可以做些什么来查看活动选择器上的标签并处理它?我的标签是URI
感谢
答案 0 :(得分:0)
您可以尝试使用此URI:
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http"
android:host="developer.android.com"
android:pathPrefix="/index.html" />
</intent-filter>
这是检测URI类型Ndef的合适方法。您的代码正在寻找MIME类型。最值得关注的是你拥有的NDE类型记录。
您可以使用此链接获取有关此方面的更多信息:http://developer.android.com/guide/topics/nfc/nfc.html
答案 1 :(得分:0)
您的代码正在使用前台调度,这是不必要的。只需使用intent过滤器。如果您的应用程序是唯一一个过滤该URI的应用程序,它将自动启动。如果有多个应用程序可以处理URI,则您的应用程序将显示在活动启动器中。您不需要第二个代码段,只需要Ben答案中的代码段,然后根据您的URI修改它。
答案 2 :(得分:0)
仅当有多个应用程序具有相同的意图过滤器时,才会显示“活动选择器”。如果您已将Uri写入您的标记,则应使用
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="http"
android:host="developer.android.com"
android:pathPrefix="/index.html" />
</intent-filter>