我有一个应用程序,当飞行模式打开时,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);
}
}
如果我想取消此指示灯,当飞行模式关闭时,我该如何检查此事件?
感谢...
答案 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);
}
}
}
}
我没有测试过这段代码,因此您可能需要对其进行修改。但希望这个概念是正确的。