Uri.parse和Uri.Builder给出相同的uri但结果不同

时间:2015-09-23 14:12:40

标签: android

我很难弄清楚这里有什么问题。我有一个带有这个意图过滤器的活动:

<intent-filter>
    <action android:name="android.intent.action.VIEW"/>

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

    <data
        android:scheme="launcher"
        android:host="custo"
        />
  </intent-filter>

我通过执行来成功启动我的活动(路径和参数在代码中进一步处理):

context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("launcher://custo/3dw?iuid=06eec76c-f48e-4961-870e-4b27495f8201"));

但是这个不起作用:

Uri uri = new Uri.Builder().scheme("launcher").appendEncodedPath("/custo").appendPath("3dw").appendQueryParameter("iuid", "f6f18a3d-14f9-4969-8a24-8130f4cad5d1").build();
context.startActivity(new Intent(Intent.ACTION_VIEW, uri);

错误是:

  

无法以意图启动活动“act = ... action.VIEW dat =”launcher:// custo / 3dw?iuid = 06eec76c-f48e-4961-870e-4b27495f8201“(这是我解析的字符串相同)。

怎么了?

1 个答案:

答案 0 :(得分:1)

在第二个示例中,您的Uri缺少框架必须查找的authority。它起初看起来像一个有效的Uri,但是您提供了一条路径,使您的Uri看起来像下面的那样(注意方案之后缺少/),而不是授予权限。 :

  

启动器:/?丘斯托/ 3DW IUID = f6f18a3d-14f9-4969-8a24-8130f4cad5d1

你的陈述应该是:

new Uri.Builder()
  .scheme("launcher")
  .authority("custo")
  .appendPath("3dw")
  .appendQueryParameter("iuid", "f6f18a3d-14f9-4969-8a24-8130f4cad5d1")
  .build();