带有 BroadcastReceiver 的清单中的 ACTION_USER_PRESENT

发布于 2024-12-11 01:06:13 字数 452 浏览 0 评论 0原文

对于是否可以通过清单捕获 ACTION_USER_PRESENT 屏幕解锁似乎存在不同意见。

此线程暗示不,它无法完成:

Android Broadcast Receiver Not Operating

此线程意味着可以做到:

广播接收器ACTION_USER_PRESENT,ACTION_SCREEN_ON,ACTION_BOOT_COMPLETED

我无法使该事件与 2.3.3 或 3.2 模拟器配合使用。

最近还有其他人有这方面的经验吗?也许还有一个可以分享的代码示例?

There seems to be different opinions on whether it is possible to catch the ACTION_USER_PRESENT screen unlock through the manifest.

This thread implies no it can't be done:

Android Broadcast Receiver Not Working

This thread implies yes it can be done:

Broadcast Receiver for ACTION_USER_PRESENT,ACTION_SCREEN_ON,ACTION_BOOT_COMPLETED

I'm not able to get the event working with either a 2.3.3 or 3.2 emulator.

Does anyone else have recent experience with this? And perhaps a code sample to share?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

半枫 2024-12-18 01:06:13

使用接收器:

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>

Use a receiver:

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

And in your manifest:

    <receiver
        android:name=".Receive"
        android:enabled="true"
        android:exported="false">
        <intent-filter>
            <action android:name="android.intent.action.USER_PRESENT"/>
        </intent-filter>
    </receiver>
贪了杯 2024-12-18 01:06:13

官方文件说:

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

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

因此,只有某些异常可以接收隐式的、清单定义的事件。

简短回答:
所以不可能再在清单中声明它了。但它可以通过上下文注册来使用。

The official document says:

Beginning with Android 8.0 (API level 26), the system imposes
additional restrictions on manifest-declared receivers.

If your app targets Android 8.0 or higher, you cannot use the manifest
to declare a receiver for most implicit broadcasts (broadcasts that
don't target your app specifically). You can still use a
context-registered receiver when the user is actively using your app.

so only some exception can receive implicit, manifest-defined events.

Short answer:
so it's not possible anymore to declare it in the manifest. but it's available by context-registering.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文