2012-03-06 57 views
7

我遇到问题。荫使用下面的代码来interupt链接到我的应用程序作为指向我的应用的链接

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

但问题是,我需要在运行时也就是我可以添加或删除在运行时,主机设置数据方案和主机。所以请有人帮助我设定数据方案,并在runtime.I主机的价值正在使用下面的代码,但它不工作

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

可以请一个人帮我 – saba 2012-03-06 10:08:38

+0

我已经得到了这个答案,所以如果有人需要帮助。 ACTION.VIEW是一项活动操作。因此我们无法将其注册到广播接收器。由于意图过滤器不能在运行时设置(除了广播接收器的情况)。而广播接收机可以只重播像android.intent.action.PHONE_STATE这样的广播动作。因此注册ACTION> VIEW是不允许的,广播接收者将永远不会对其做出响应。 – saba 2012-03-07 10:13:21

回答

4

严格地说,对应于ACTION_VIEW字符串是活动动作按照惯例 ;事实上,您将其放入清单中的activityintent-filter元素中,使其成为它是一个活动操作!系统代表您的应用程序监听这些信息,这基本上就是您为什么不自己监听它们的原因。 Context.startActivity()方法生成这些Intent s。

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

有三个Intent “流” 永不交叉:startActivity()sendBroadcast()startService()。这些都是通过Context中的方法启动的,并且各自分别具有特定目标ActivityBroadcastReceiverService

这是一个简单的事情成立了BroadcastReceiver(不ReceiveBroadcaster你甚至尝试这个代码吗?),让你感兴趣的事件,然后使用Context.startActivity()Intent你想要的。您甚至可以使用自定义操作,所以您知道它是由接收方触发的,而不是用户触发的。

唯一的问题是:有没有可以安排接收的广播事件?您可以注册一个系统事件,或者您可以通过Context.sendBroadcast()自己生成一个自定义事件。

请记住,您可以检查传入的Intent您的活动开始于“前进”相同或修改为Intent,如果它不完全符合您的要求。正如您正确确定的那样,您不能动态更改活动的一组IntentFilter,因此您必须检查每个请求的主机。

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

相关问题