Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android NFC和MIME类型区分大小写_Android_Nfc_Mime Types_Intentfilter_Ndef - Fatal编程技术网

Android NFC和MIME类型区分大小写

Android NFC和MIME类型区分大小写,android,nfc,mime-types,intentfilter,ndef,Android,Nfc,Mime Types,Intentfilter,Ndef,我正在尝试NFC的基本版本,但后来我发现MIME类型是区分大小写的。我的应用程序包名有一个大写字母 包名称:com.example.Main\u活动 <intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED"/> <category android:name="android.intent.category.DEFAULT"/> <data android

我正在尝试NFC的基本版本,但后来我发现MIME类型是区分大小写的。我的应用程序包名有一个大写字母

包名称:
com.example.Main\u活动

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

有人知道怎么绕过它吗


谢谢

这让我疯狂了一周。我终于明白了。 即使我的包裹名称中有大写字母。您必须在代码和意图过滤器中用小写字母编写MIME类型。我知道在realty中它们不是同一个软件包,但是NFC中的MIME类型仍然可以识别你的应用程序。创建应用程序记录时,请确保编写正确的包。如果你注意到我必须使用正确的包名,其中包括大写字母。否则将找不到您的应用程序

希望这能帮助别人

public NdefMessage createNdefMessage(NfcEvent event) {
        String text = ("Beam me up, Android!\n\n" +
                "Beam Time: " + System.currentTimeMillis());
        NdefMessage msg = new NdefMessage(
                new NdefRecord[] { NdefRecord.createMime(
                        "application/com.example.main_activity", text.getBytes())
         /**
          * The Android Application Record (AAR) is commented out. When a device
          * receives a push with an AAR in it, the application specified in the AAR
          * is guaranteed to run. The AAR overrides the tag dispatch system.
          * You can add it back in to guarantee that this
          * activity starts when receiving a beamed message. For now, this code
          * uses the tag dispatch system.
          */
          ,NdefRecord.createApplicationRecord("com.example.Main_Activity")
        });
        return msg;
    }
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="application/com.example.main_activity"/>
</intent-filter>
public NdefMessage createNdefMessage(NfcEvent事件){
字符串文本=(“向上传送,Android!\n\n”+
“束流时间:”+System.currentTimeMillis());
NdefMessage msg=新的NdefMessage(
新建NdefRecord[]{NdefRecord.createMime(
“application/com.example.main_活动”,text.getBytes()
/**
*Android应用程序记录(AAR)被注释掉
*接收包含AAR的推送,AAR中指定的应用程序
*保证运行。AAR覆盖标签调度系统。
*您可以将其添加回以保证
*活动在接收到波束消息时开始
*使用标签分派系统。
*/
,NdefRecord.createApplicationRecord(“com.example.Main\u活动”)
});
返回味精;
}

根据RFC,MIME类型不区分大小写。然而,Android的意图过滤器匹配是区分大小写的。为了克服这个问题,您应该始终只使用小写MIME类型

特别是使用Android NFC API的MIME类型记录帮助器方法,MIME类型将自动转换为仅小写字母。因此,使用混合大小写类型名称调用方法
NdefRecord.createMime()
,将始终导致创建仅小写的MIME类型名称。例如

NdefRecord r1 = NdefRecord.createMime("text/ThisIsMyMIMEType", ...);
NdefRecord r2 = NdefRecord.createMime("text/tHISiSmYmimetYPE", ...);
NdefRecord r3 = NdefRecord.createMime("text/THISISMYMIMETYPE", ...);
NdefRecord r4 = NdefRecord.createMime("text/thisismymimetype", ...);
所有这些都将导致创建相同的MIME类型记录类型:

+----------------------------------------------------------+
| MIME:text/thisismymimetype | ...                         |
+----------------------------------------------------------+
因此,您的意图过滤器也需要为所有小写字母:

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