相关疑难解决方法(0)

android:用于屏幕和屏幕关闭的广播接收器

我只是想知道是否可以在应用程序清单中注册检测屏幕ON/OFF的广播接收器.我不喜欢可编程方法的原因是它需要运行应用程序以便检测这样的事情,同时:"当Intent是Intent时,在清单中注册的广播接收器的应用程序不必运行广播接收器执行"(来源:专业Android 2应用程序开发书)

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

有办法解决吗?

我在清单中尝试以下内容:

<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>
Run Code Online (Sandbox Code Playgroud)

和简单的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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

android screen broadcastreceiver

58
推荐指数
1
解决办法
6万
查看次数

BroadcastReceiver的Manifest和Programmatic注册之间的主要区别

我试图理解在Manifest中注册BroadcastReceiver和以编程方式注册它之间的主要区别...

我的理解基本如下(如果我遗漏了某些东西,我会感谢有人纠正我的观点).

  • 在Manifest中注册:

    1. 如果需要,操作系统将神奇地查找并实例化您的类,调用onReceive()方法,无论您的应用程序的运行状态是什么
    2. 您的接收只会在每次广播时被呼叫一次(即您可以认为在清单中注册就像注册您的"班级"以接收广播一样 - 并且广播会根据需要实例化您的班级)(??)
  • 以编程方式注册:

    1. 在代码中注册意味着您正在注册您的类的实例以接收广播消息(即,如果您的代码有点草率,并且您设法多次注册,则最终会有多个BroadcastReceiver实例都调用其onReceive()广播
    2. 要取消注册,您需要取消注册先前注册的特定BroadcastReceiver实例
    3. 如果您的应用程序被操作系统销毁,则不会为广播调用onReceive()方法

谢谢

android broadcastreceiver android-lifecycle

19
推荐指数
2
解决办法
6954
查看次数