通过intent启动浏览器,使用schema" HTTP" (大写)错误

时间:2014-12-02 14:09:36

标签: android android-intent

我使用代码启动了一个意图:

startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));

为什么网址以" http"开头?是有效但如果url以" HTTP"(大写)开头,它会抛出一个ActivityNotFoundException?这很奇怪,因为网址遵循标准的RFC 2396。

2 个答案:

答案 0 :(得分:2)

RFC 2396,sec。 3.1说:

  

方案名称由一系列以小写字母开头的字符组成,后跟小写字母,数字,加号(" +"),句号("。& #34;),或连字符(" - ")。对于弹性,解释URI的程序应将大写字母视为与方案名称中的小写字母等效(例如,允许" HTTP"以及" http")。

即。大写" HTTP"根据规格不正确。虽然程序应该将大写视为等同于小写,但它不必。

确保URI的方案部分是小写的,这对您来说也很简单,因此很容易避免。

答案 1 :(得分:0)

您可以使用:normalizeScheme()

//Return an equivalent URI with a lowercase scheme component. 
// This aligns the Uri with Android best practices for intent filtering.
// For example, "HTTP://www.android.com" becomes "http://www.android.com" 
Uri uri =  Uri.parse(url).normalizeScheme()
startActivity(new Intent(Intent.ACTION_VIEW, uri))

在此处查看更多信息:normalizeScheme