gpt4 book ai didi

android:屏幕打开和屏幕关闭的广播接收器

转载 作者:IT老高 更新时间:2023-10-28 13:24:28 31 4
gpt4 key购买 nike

我只是想知道是否可以在应用程序 list 中注册一个检测屏幕开/关的广播接收器。我不喜欢可编程方法的原因是它需要运行应用程序才能检测到这样的事情,而:“在广播 Intent 时,在 list 中注册了广播接收器的应用程序不必运行”(来源:Professional Android 2 Application Development book)

我的应用程序实际上是一个锁屏应用程序,通过使用可编程方式需要一直运行:S

有办法解决吗?

我正在 list 中尝试以下内容:

<receiver android:name=".MyBroadCastReciever">
<intent-filter>
<action android:name="android.intent.action.SCREEN_OFF"/>
<action android:name="android.intent.action.SCREEN_ON"/>
</intent-filter>
</receiver>

和简单的 MyBroadCastReciever 类:

public class MyBroadCastReciever extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
Log.i("Check","Screen went OFF");
Toast.makeText(context, "screen OFF",Toast.LENGTH_LONG).show();
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
Log.i("Check","Screen went ON");
Toast.makeText(context, "screen ON",Toast.LENGTH_LONG).show();
}
}
}

最佳答案

屏幕开启和关闭的两个 Action 是:

android.intent.action.SCREEN_OFF
android.intent.action.SCREEN_ON

但是,如果您在 list 中为这些广播注册接收器,那么接收器将不会接收这些广播。

对于这个问题,你必须创建一个长时间运行的服务,它为这些 Intent 注册一个本地广播接收器。如果您这样做,那么您的应用将仅在您的服务运行时才寻找屏幕关闭,这不会刺激用户。

PS:在前台启动服务,使其运行时间更长。

一个简单的代码 fragment 将是这样的:

IntentFilter screenStateFilter = new IntentFilter();
screenStateFilter.addAction(Intent.ACTION_SCREEN_ON);
screenStateFilter.addAction(Intent.ACTION_SCREEN_OFF);
registerReceiver(mScreenStateReceiver, screenStateFilter);

不要忘记在 ServiceonDestroy 中取消注册接收器:

unregisterReceiver(mScreenStateReceiver);

以防万一有人问为什么接收器不能处理 ACTION_SCREEN_ON 和 ACTION_SCREEN_OFF list 中的声明广播:

https://developer.android.com/reference/android/content/Intent.html#ACTION_SCREEN_ON https://developer.android.com/reference/android/content/Intent.html#ACTION_SCREEN_OFF

You cannot receive this through components declared in manifests, only by explicitly registering for it with Context.registerReceiver().

This is a protected intent that can only be sent by the system.

关于android:屏幕打开和屏幕关闭的广播接收器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9477922/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com