即使设备处于锁定状态,我也希望通过长按电源按钮将BroadcastReceiver发送到我的应用程序。直到现在我尝试各种动作,例如
<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>
在我的但是没有给出好的效果。我的BroadcastReciever仅适用于用户关闭设备的情况。 请帮我解决这个问题。 感谢
答案 0 :(得分:2)
添加意图过滤器:
IntentFilter filter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
BroadcastReceiver myReceiver = new MYBCR();
registerReceiver(myReceiver, filter);
您的广播接收者:
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)){
Log.d("tag", "system dialog close");
}
}
这对我来说很好,它也可以监听每个系统对话框。 如果您只想长按电源按钮,可以使用服务,并且在浏览开发人员指南后没有找到任何广播接收器。
以下是我对服务的处理方式:
@Override
public void onCreate() {
super.onCreate();
mLinear = new LinearLayout(getApplicationContext()) {
//home or recent button
public void onCloseSystemDialogs(String reason) {
if ("globalactions".equals(reason)) {
Log.d("tag", "Long press on power button");
} else if ("homekey".equals(reason)) {
//home key pressed
} else if ("recentapps".equals(reason)) {
// recent apps button clicked
}
}
};
mLinear.setFocusable(true);
View mView = LayoutInflater.from(this).inflate(R.layout.test, mLinear);
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
//params
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
1,
1,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_FULLSCREEN
| WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON,
PixelFormat.OPAQUE);
params.gravity = Gravity.TOP | Gravity.LEFT;
wm.addView(mView, params);
}
你需要一个布局,并确保它是一个线性布局,就是这样。 即使屏幕被锁定,您也可以长按电源。
希望这会有所帮助。