【问题标题】:ACTION_USER_PRESENT in manifest with BroadcastReceiver清单中的 ACTION_USER_PRESENT 与 BroadcastReceiver
【发布时间】:2011-12-12 19:13:47
【问题描述】:

对于是否可以通过manifest抓到ACTION_USER_PRESENT屏幕解锁,似乎众说纷纭。

这个帖子暗示不,它不能完成:

Android Broadcast Receiver Not Working

这个帖子暗示是可以做到的:

Broadcast Receiver for ACTION_USER_PRESENT,ACTION_SCREEN_ON,ACTION_BOOT_COMPLETED

我无法使用 2.3.3 或 3.2 模拟器使事件正常工作。

有其他人最近有这方面的经验吗?或许还有要分享的代码示例?

【问题讨论】:

    标签: android android-manifest broadcastreceiver


    【解决方案1】:

    使用接收器:

    public class Receive extends BroadcastReceiver {
    
    if (intent.getAction() != null) {
                if
                        ( intent.getAction().equals(Intent.ACTION_USER_PRESENT)) {
    Intent s = new Intent(context, MainActivity.class);
                        s.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    
                        context.startActivity(s);
    }}
    

    在你的清单中:

        <receiver
            android:name=".Receive"
            android:enabled="true"
            android:exported="false">
            <intent-filter>
                <action android:name="android.intent.action.USER_PRESENT"/>
            </intent-filter>
        </receiver>
    

    【讨论】:

    • 我在您的代码上方使用过,但我的锁定活动第一次打开但我不知道之后它会在屏幕打开时自动调用壁纸对话框。为什么在屏幕打开时打开此对话框而不是我的锁定活动...请尽快提供帮助,谢谢...
    • 我不会使用android:exported="false",这在&lt;intent-filter&gt;-标签上也是不允许的,请参阅stackoverflow.com/questions/29081414/…
    【解决方案2】:

    官方文档说:

    从 Android 8.0(API 级别 26)开始,系统强制 对清单声明的接收方的额外限制。

    如果您的应用面向 Android 8.0 或更高版本,则无法使用清单 为大多数隐式广播声明一个接收器(广播 不要专门针对您的应用程序)。您仍然可以使用 当用户积极使用您的应用时,上下文注册的接收器。

    所以只有some exception 可以接收隐式的、清单定义的事件。

    简答: 所以不可能再在清单中声明它。但它可以通过上下文注册获得。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多