我有问题。我正在使用以下代码来中断我的应用程序的链接
<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);
答案 0 :(得分:4)
严格地说,与ACTION_VIEW
对应的字符串是按惯例的活动>;事实上,您将其放入清单中intent-filter
的{{1}}元素中,使成为活动动作!系统会代表您的应用程序监听这些内容,这基本上就是您不能(不能)自己监听它们的原因。 activity
方法会生成这些Context.startActivity()
。
意图解决规则实际上决定了特定Intent
是否与任何Intent
匹配。对于活动意图,可能有多个匹配,并且通常显示“选择器”界面,因此用户可以选择目标。
永远不会跨越三个IntentFilter
“流”:Intent
,startActivity()
和sendBroadcast()
。这些都是通过startService()
中的方法启动的,每个方法都分别有一个特定的目标Context
,Activity
和BroadcastReceiver
。
设置一个Service
(不是BroadcastReceiver
你甚至试过那个代码吗?)来获取你感兴趣的事件,然后使用ReceiveBroadcaster
你想要的Context.startActivity()
。您甚至可以使用自定义操作,因此您知道它是由接收者而不是用户触发的。
唯一的问题是:是否有可以安排接收的广播活动?您可以注册一个系统活动,或者您可以通过Intent
自行生成自定义活动。
请记住,您可以检查您的活动的传入Context.sendBroadcast()
,如果它与您要查找的内容不完全匹配,则“转发”相同或修改后的Intent
。正确确定后,您无法动态更改活动的Intent
集,因此您必须检查每个请求的主机。
请记住,您也可以在清单中注册接收器,并让系统自动调用该实现。