如何在Android中解锁屏幕时取消led通知?

时间:2015-06-01 11:16:54

标签: android notifications led

我有一个应用程序,当飞行模式打开时,LED指示灯通知开始。当我的屏幕解锁时,我想停止或取消这个LED指示灯。我可以处理这个吗?

我尝试了这个但没有奏效:

....
 PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
    boolean isScreenOn = powerManager.isScreenOn();
    if (isScreenOn) {
        stop();
    }
}


public void stop(){
        NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        nm.cancel(NOTIFICATION_ID);
        }


}

如果我想取消此指示灯,当飞行模式关闭时,我该如何检查此事件?

感谢...

2 个答案:

答案 0 :(得分:1)

你的代码在哪里?

PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
    boolean isScreenOn = powerManager.isScreenOn();
    if (isScreenOn) {
        stop();
    }

我相信这里没有错,但是如果你在onCreate()宣布它就行不通。

您需要注册一个接收器。

registerReceiver(this.screenOffListener, new IntentFilter("android.intent.action.SCREEN_OFF"));

并在正确的位置声明您的代码

public class ScreenOffListener extends BroadcastReceiver
{
    public ScreenOffListener() {}

    public void onReceive(Context paramContext, Intent paramIntent)
    {
        // place your code
    }
}

答案 1 :(得分:1)

首先,处理(ACTION_USER_PRESENT)http://developer.android.com/reference/android/content/Intent.html#ACTION_USER_PRESENT - 这是设备解锁的时间。然后取消。

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

public class Receive extends BroadcastReceiver {
    if (intent.getAction() != null) {
        if (intent.getAction().equals(Intent.ACTION_USER_PRESENT)) {
            if (Context.NOTIFICATION_SERVICE != null) {
                String ns = Context.NOTIFICATION_SERVICE;
                NotificationManager nMgr = (NotificationManager) getApplicationContext().getSystemService(ns);
                nMgr.cancel(0);
            }
        }
    }
}

我没有测试过这段代码,因此您可能需要对其进行修改。但希望这个概念是正确的。