BroadcastReceiver活动

时间:2014-10-30 10:54:45

标签: android broadcastreceiver

我想更改活动的KeepScreenOn值,因此我想在活动中使用BroadcastReceiver。我在onCreate注册接收器:

registerReceiver(receiver, new IntentFilter("ACTION_POWER_CONNECTED"));
            registerReceiver(receiver, new IntentFilter("ACTION_POWER_DISCONNECTED"));

并在onPause中取消注册:

unregisterReceiver(receiver);

接收器看起来像这样:

    private BroadcastReceiver receiver = new BroadcastReceiver(){
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (action.equals(Intent.ACTION_POWER_CONNECTED)) {
            findViewById(R.id.fullscreen_content).setKeepScreenOn(true);
        } else if (action.equals(Intent.ACTION_POWER_DISCONNECTED)) {
            media=MediaPlayer.create(context,R.raw.battery);
            media.start();
            findViewById(R.id.fullscreen_content).setKeepScreenOn(false);
        }
    }
};

没有错误,断开/连接电源时根本不会改变任何东西。有什么建议吗?

3 个答案:

答案 0 :(得分:2)

您应该使用已定义的常量,而不是字符串值:

IntentFilter(Intent.ACTION_POWER_CONNECTED)

而不是:

IntentFilter("ACTION_POWER_CONNECTED")

答案 1 :(得分:0)

Receiver

中注册了AndroidManifest.xml次注册的操作
    <receiver android:name="com.app.example.firstapp.MyReceiver">
            <intent-filter>
                <action android:name="android.intent.action.SCREEN_OFF"></action>
                <action android:name="android.intent.action.SCREEN_ON"></action>
                <action android:name="android.intent.action.ACTION_POWER_CONNECTED"></action>
                <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"></action>
                 <action android:name="android.intent.action.ACTION_SHUTDOWN"></action>
            </intent-filter>
        </receiver>

另外不要忘记添加权限

<uses-permission android:name="android.permission.BATTERY_STATS"/>

答案 2 :(得分:0)

首先在接收器中设置调试点以查看它是否实际触发

如果不是那样:

我现在不是坐在我的IDE上,但我认为这不起作用,因为你使用不同的过滤器注册相同的接收器,第二个将覆盖第一个动作。

如果您希望一个接收器有多个操作,您应该使用IntentFilter addAction()方法创建一个过滤器并向其添加多个操作。然后,当您的接收器被调用时,您应该使用Intent getAction()方法来确定触发了哪个动作。

您也应该只在onStartonResume注册您的接收器。

如果它正在开火:

要保持屏幕,请在此处尝试解决方案:Keep Screen On Flag