[英]Broadcast receiver not detecting keyevents
我正在尝试在我的应用中接收电源按钮事件。 我已经在清单文件中添加了以下代码,然后在广播接收器类的receive方法中显示了吐司,但是该代码仍然无法正常工作。 我想念什么吗?
<receiver android:name="com.xxxxx">
<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>
问候
是的,您可能想做的只是几件事,我想清除,在屏幕关闭时显示烤面包是没有用的,同时检测电源按钮和屏幕状态是否相同,我将向您展示如何检测屏幕状态和显示烤面包仅,但是电源按钮我仍然不知道如何检测它,因为电源按钮仅由系统管理,我认为您需要root才能调整电源按钮或向电源按钮添加功能。 这里是您需要的任何代码:
1-您需要一项可以启动/停止检测屏幕状态的活动,一项使您的应用在后台运行的服务,最后是Broadcastreceiver。 因此,从活动中您应该开始服务:
startService(new Intent(MainActivity.this, yourservice.class));
确保完成后将其停止
stopService(new Intent(MainActivity.this, yourservice.class));
2-您的服务应如下所示:
public class yourservice extends Service{
private BroadcastReceiver mReceiver;
public void onCreate() {
super.onCreate();
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
this.mReceiver = new your receiver();
this.registerReceiver(this.mReceiver, filter);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (yourbroasdcast.screenOff) {
//here screen is off do your stuff
} else {
//here screen is on do your stuff example your toast
Toast.makeText(getApplicationContext(), "write your toast here", Toast.LENGTH_LONG).show();
}
return START_STICKY;
}
3-您的广泛接收者:
public class yourbroadcast extends BroadcastReceiver{
public static boolean screenOff;
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
screenOff = true;
}else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
screenOff = false;
}
Intent i = new Intent(context, yourservice.class);
i.putExtra("screen state", screenOff);
context.startService(i);
}
}
4-清单应如下所示
<service
android:enabled="true"
android:name=".yourservice"/>
<receiver android:name=".yourbroadcast" android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.SCREEN_OFF" />
<action android:name="android.intent.action.SCREEN_ON" />
</intent-filter>
</receiver>
希望我能帮助您...如果您需要什么,请问我:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.