我正在构建一个应接收 Android 的 android.intent.action.SCREEN_ON
广播并在后台执行某些操作的应用。
(该广播 protected ,不能添加到 list 中的 IntentFilter 部分,需要通过 registerReceiver()
以编程方式注册)
我知道如何启动服务。我知道如何使它独立于启动它的 Activity(因此它不会随之消亡)。真正的问题是:
如何在服务中注册 SCREEN_ON 广播接收器,以便在系统发送广播时,即使服务因内存不足而暂时被设备杀死,服务也能接收到它?
最佳答案
public class OnBootService extends Service {
private static final String TAG = OnBootService.class.getSimpleName();
private PowerButtonReceiver mPowerButtonReceiver = null;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(final Intent intent, final int flags, final int startId) {
if (mPowerButtonReceiver==null) {
mPowerButtonReceiver = new PowerButtonReceiver();
registerReceiver(mPowerButtonReceiver, new IntentFilter(Intent.ACTION_SCREEN_ON));
}
return Service.START_NOT_STICKY;
}
@Override
public void onCreate() {
super.onCreate();
Log.i(TAG,"onCreate()");
}
// unregister the Receiver when the Service gets stopped (destroyed)
@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(mPowerButtonReceiver);
Log.i(TAG, ""+TAG+" stopped: "+ new Date().toString());
}
}
编辑:我也添加了 powerButtonReceiver:
public class PowerButtonReceiver extends BroadcastReceiver {
private static final String TAG = "PowerButtonReceiver";
private int mPowerClickCounter = 0;
private boolean inTime = true;
@Override
public void onReceive(Context context, Intent intent) {
SharedPreferences sharedPref = context.getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
Boolean bCheck = sharedPref.getBoolean("PowerButtonReceiverState", false);
// check if screen is on
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
Boolean screenOn = pm.isScreenOn();
Log.i(TAG, "Screen is on: " + screenOn.toString());
}}
关于android - 运行将接收 SCREEN_ON 广播的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19422424/