Android 我如何接收第三方意图,然后采取行动?

Android 我如何接收第三方意图,然后采取行动?,android,android-intent,broadcastreceiver,Android,Android Intent,Broadcastreceiver,我的应用程序依赖于触发的intentACTION\u USER\u PRESENT,因此我在清单中设置了一个接收者,我有一个类,当它接收到意图时启动服务 但是,当用户使用锁屏替换应用程序(如WidgetLocker)时,ACTION\u user\u PRESENTintent可能永远不会发送,也可能多次发送。(发送5次后…)WidgetLocker的网站解释说,应用程序确实发送了自己的解锁意图,com.teslacoilsw.WidgetLocker.intent.UNLOCKED。在Widg

我的应用程序依赖于触发的intent
ACTION\u USER\u PRESENT
,因此我在清单中设置了一个接收者,我有一个类,当它接收到意图时启动服务

但是,当用户使用锁屏替换应用程序(如WidgetLocker)时,
ACTION\u user\u PRESENT
intent可能永远不会发送,也可能多次发送。(发送5次后…)WidgetLocker的网站解释说,应用程序确实发送了自己的解锁意图,
com.teslacoilsw.WidgetLocker.intent.UNLOCKED
。在WidgetLocker的某些配置中,
ACTION\u USER\u PRESENT
可能在用户解锁屏幕之前被触发,因此我被告知最好设置一个检查
com.teslacoilsw.WidgetLocker.intent.LOCKED
,然后等待接收
UNLOCKED
意图并完成我的工作

我的问题是,我不确定如何为第三方意图设置接收器。我已经在清单just find中将这些操作添加到我的接收者,我知道我的广播接收者会接收到它们,但我需要过滤掉它们。主要是,如果我选择了
LOCKED
意图,我想忽略任何
ACTION\u USER\u PRESENT
意图,而是等待
UNLOCKED
意图,但我不知道如何在收到不同的意图时等待意图

主要是,如果我选择了锁定的意图,我想忽略任何操作用户当前的意图,而是等待解锁的意图,但我不知道如何在收到不同的意图时等待意图

步骤1:为WidgetLocker操作与当前用户操作创建单独的
广播接收器

步骤2:在收到
锁定
后,使用
PackageManager
setComponentEnabledSetting()
禁用您的
操作用户在场
接收器

步骤3:在收到
解锁后
,使用
PackageManager
setComponentEnabledSetting()
重新启用用户当前的
操作
接收器


在边缘情况下,这可能会有点冒险(例如,用户在
锁定时弹出电池),但这是一个起点。

“我的应用程序依赖于当前用户被触发的意图操作”——我会尝试消除此要求。为什么?我的应用程序的主要功能是每当你解锁屏幕时,向你敬酒作为提醒,所以这是一个要求……啊,对不起,没关系。我在想,
ACTION\u USER\u PRESENT
需要永久服务。为什么我需要单独的接收器?如果只有一个函数同时处理了这三个函数,那又有什么问题呢?我的意思是,我不能使用类似于:
if(intnet.getAction().equals(com.teslacoilsw.widgetlocker.intent.LOCKED){do stuff}的东西吗{do other stuff
@PatrickMahoney:首先,我的启用/禁用建议不适用于一个。其次,您必须在某个地方保持您的状态,因为您的进程可能在广播之间终止。但我还有最后一个问题:使用
if(intent.getAction().equals(com.teslacoilsw.widgetlocker.intent.LOCKED))
,Eclipse告诉我com.teslacoilsw无法解析为变量。有没有更好的方法来检查意图?最后,我如何在清单中指定要禁用的接收器?非常感谢您的帮助@commonware!@PatrickMahoney:“有没有更好的方法来检查意图?”--您需要使用一个文本字符串,它可能是
“com.teslacoilsw.widgetlocker.intent.LOCKED”
--您必须询问他们。“如何在清单中指定要禁用的接收方?”--调用时按类(技术上,通过
组件名
)进行