中断我的应用程序的链接

时间:2012-03-06 07:16:46

标签: 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="http" android:host="twitter.com"/>
    <data android:scheme="http" android:host="facebook.com"/>
</intent-filter>

但问题是我需要在运行时设置数据方案和主机,即我可以在运行时添加或删除主机。如何在运行时设置数据方案和主机的值?我使用下面的代码,但它无法正常工作

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);

1 个答案:

答案 0 :(得分:4)

严格地说,与ACTION_VIEW对应的字符串是按惯例的活动;事实上,您将其放入清单中intent-filter的{​​{1}}元素中,使成为活动动作!系统会代表您的应用程序监听这些内容,这基本上就是您不能(不能)自己监听它们的原因。 activity方法会生成这些Context.startActivity()

意图解决规则实际上决定了特定Intent是否与任何Intent匹配。对于活动意图,可能有多个匹配,并且通常显示“选择器”界面,因此用户可以选择目标。

永远不会跨越三个IntentFilter“流”:IntentstartActivity()sendBroadcast()。这些都是通过startService()中的方法启动的,每个方法都分别有一个特定的目标ContextActivityBroadcastReceiver

设置一个Service(不是BroadcastReceiver你甚至试过那个代码吗?)来获取你感兴趣的事件,然后使用ReceiveBroadcaster你想要的Context.startActivity()。您甚至可以使用自定义操作,因此您知道它是由接收者而不是用户触发的。

唯一的问题是:是否有可以安排接收的广播活动?您可以注册一个系统活动,或者您可以通过Intent自行生成自定义活动。

请记住,您可以检查您的活动的传入Context.sendBroadcast(),如果它与您要查找的内容不完全匹配,则“转发”相同或修改后的Intent。正确确定后,您无法动态更改活动的Intent集,因此您必须检查每个请求的主机。

请记住,您也可以在清单中注册接收器,并让系统自动调用该实现。