Android:过滤特定Uri模式的意图

时间:2010-11-05 22:07:36

标签: android filter android-activity android-intent pattern-matching

我需要我的Android应用程序在我的应用程序中运行某个Activity,响应来自发出的Intent的以下Uri数据:

http://www.example.com/redirect.aspx?customurl=example%3a%2f%2f%3fop%3dexampledetail%26stuff%3d12345%26morestuff%3dI%2520Love%25Android

如果我在清单中使用以下内容(对于我想要响应Intent的Activity),我可以捕获它,但弹出选择器(我不想要):

<intent-filter>
 <action android:name="android.intent.action.VIEW" />
 <data android:scheme="http" android:host="www.example.com" />
 <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

由于我不想让选择器弹出,我试图在标签中使用android:pathPattern或android:pathPrefix进一步过滤,以确保只有我的应用响应,但它不适合我

任何人都可以帮我这么做吗?

2 个答案:

答案 0 :(得分:7)

  

如果我在清单中使用以下内容(对于我想要响应Intent的Activity),我可以捕获它,但弹出选择器(我不想要):

大多数Android设备上都会有1个以上的浏览器。我们非常欢迎用户在其中一个浏览器而不是您的应用中访问该网址,这就是选择器出现的原因。此外,如果开发人员能够劫持他们想要的任何HTTP URL,那将是一个巨大的安全漏洞。

现在,如果您拥有此URL链接到的网站,您可以使用条形码扫描器使用的技巧:使用浏览器检测将智能放在该页面上,如果在Android浏览器中查看,则向用户说明为什么他们应该允许您的应用在将来处理该网址。

答案 1 :(得分:6)

看起来您处理来自您自己的应用程序的数据,所以不要使用您的“私有”URL作为intent的目标,而是创建一个特定于组件的Intent并将其作为EXTRA的URL提供给它参数。

类似的东西:

Uri privateUri = Uri.parse("http://yourserver.com/path/to/data");
Intent i = new Intent(context, yourActivity.class);
i.putExtra("DATA_URI", privateUri);
startActivity(i);

在yourActivity.class中,您只需使用以下代码获取Uri:

Uri privateUri = (Uri) getIntent().getParcelableExtra("DATA_URI");