Chr*_*rry 3 android filter pattern-matching android-intent android-activity
我需要我的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>
Run Code Online (Sandbox Code Playgroud)
由于我不希望弹出选择器,我尝试使用标签中的android:pathPattern或android:pathPrefix进一步过滤,以确保只有我的应用程序响应,但它不适合我.
任何人都可以帮我这样做吗?
如果我在清单中使用以下内容(对于我想要响应Intent的Activity),我可以捕获它,但选择器弹出(我不想要):
大多数Android设备上都会有1个以上的浏览器.我们非常欢迎用户在其中一个浏览器而不是您的应用中访问该网址,这就是选择器出现的原因.此外,如果开发人员能够劫持他们想要的任何HTTP URL,那将是一个巨大的安全漏洞.
现在,如果您拥有此URL链接到的网站,您可以使用条形码扫描器使用的技巧:使用浏览器检测将智能放在该页面上,如果在Android浏览器中查看,则向用户解释为什么应该这样做允许您的应用将来处理该网址.
看起来您处理来自您自己的应用程序的数据,因此不要使用您的"私有"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);
Run Code Online (Sandbox Code Playgroud)
在yourActivity.class中,您只需使用以下代码获取Uri:
Uri privateUri = (Uri) getIntent().getParcelableExtra("DATA_URI");
Run Code Online (Sandbox Code Playgroud)