我去,今天写个检测NFC的小demo,高高兴兴写完,然后贴上一卡通测试,我ri,选择应用的时候怎么没有我的应用?小米钱包有,百度地图有,武汉通行有,就没我的demo。不行,打日志,日志正常;断点调试,断点调试正常。什么鬼!!! 突然发现手机桌面居然没有我的应用启动图标!!查看应用列表,应用在啊!!
第一反应:肯定是icon图标没设置,或者没读出来,回到AndroidManifest.xml查看,一切正常。
第二反应:我难道没有设置启动页面?再次检查AndroidManifest.xml文件,尼玛启动页面是建工程时系统自动生成的好不好!
我开始方了!!!口-口 !!
到底是什么地方出问题了?Java代码我敢肯定正确,这里也不设置对启动图标的设置更改,所以不应该是Java代码的问题。那最有可能的还是AndroidManifest文件的问题了。纵观整个文件,权限设置不可能出现问题。那么剩下的就是action 和 category 的问题了。因为NFC涉及隐式意图启动,所以需要配置action 来保证当检测到NFC的时候能够正常启动你的应用页面。
想着和在一起不行,那我就分开试试:
原本写法:
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<action android:name="android.nfc.action.TECH_DISCOVERED" />
<action android:name="android.nfc.action.TAB_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
现在改成;
<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" />
<!--<action android:name="android.nfc.action.TECH_DISCOVERED" />-->
<!--<action android:name="android.nfc.action.TAB_DISCOVERED" />-->
<category android:name="android.intent.category.DEFAULT" />
<!--<data android:mimeType="text/plain" />-->
</intent-filter>
</activity>
原因为intent-filter表示activity接受怎样的intent,定义在一个intent-filter中的条件必须都满足才能按照该intent-filter启动,否则按照其他intent-filter启动。而以上明显是两类启动方式,所以必须分开。通过这个介绍可以知道其他的action、category、data冲突也有可能导致这个问题