我有个问题.我正在使用以下代码来中断我的应用程序的链接
<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="http" android:host="twitter.com"/>
<data android:scheme="http" android:host="facebook.com"/>
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
但问题是我需要在运行时设置数据方案和主机,即我可以在运行时添加或删除主机.如何在运行时设置数据方案和主机的值?我使用下面的代码,但它无法正常工作
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.VIEW");
filter.addCategory("android.intent.category.DEFAULT");
filter.addCategory("android.intent.category.BROWSABLE");
filter.addDataScheme("http");
filter.addDataAuthority("www.facebook.com", null);
RecieveBroadcaster receiver = new RecieveBroadcaster();
registerReceiver(receiver, filter);
Run Code Online (Sandbox Code Playgroud)
严格来说,对应的字符串按照惯例ACTION_VIEW是一个活动action ;事实上,您将其放入清单中的元素中,使其成为活动操作!系统代表您的应用程序侦听这些内容,这基本上就是您自己不(不能)侦听它们的原因。该方法生成这些s。intent-filteractivityContext.startActivity()Intent
意图解析的规则实际上决定了特定是否Intent与任何 s 匹配IntentFilter。对于活动意图,可能有多个匹配项,通常会显示“选择器”界面,以便用户选择目标。
存在三个Intent永远不会交叉的“流”:startActivity()、sendBroadcast()和startService()。这些都是通过 中的方法启动的,Context并且每个方法都有一个特定的目标Activity,BroadcastReceiver并且Service。
设置一个BroadcastReceiver(ReceiveBroadcaster您没有尝试过该代码吗?)来获取您感兴趣的事件,然后Context.startActivity()与您想要的事件一起使用是一件简单的事情Intent。您甚至可以使用自定义操作,这样您就知道它是由接收者而不是用户触发的。
唯一的问题是:是否有您可以安排接收的广播事件?您可能可以注册一个系统事件,或者您可以通过 自行生成自定义事件Context.sendBroadcast()。
请记住,您可以检查您的活动开始时的传入内容,如果它与您正在寻找的内容不完全匹配,则Intent“转发”相同或修改的内容。Intent正如您正确确定的那样,您无法动态更改 Activity 的集合IntentFilter,因此您必须检查每个请求的主机。
请记住,您也可以在清单中注册接收器,并让系统自动调用该实现。
| 归档时间: |
|
| 查看次数: |
1489 次 |
| 最近记录: |