我需要我的Android应用程序在我的应用程序中运行某个Activity,响应来自发出的Intent的以下Uri数据:
如果我在清单中使用以下内容(对于我想要响应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进一步过滤,以确保只有我的应用响应,但它不适合我
任何人都可以帮我这么做吗?
答案 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");