android - 运行将接收 SCREEN_ON 广播的服务

标签 android

我正在构建一个应接收 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/

相关文章:

java - JSONObject 中的 JSONObject

android - Intent ACTION_GET_CONTENT 即使对于已删除的文件也会返回 uri

android - 滑动 View + 标题栏 - 更改标题名称

java - Firebase Android 使用日期作为唯一 ID 保存数据

android - ListView 和 onItemClick 中的可聚焦 EditText

java - 从 url 加载位图太慢

java - 具有多个首选项文件的 PreferenceActivity

java - 我应该使用哪些 Android API?简单的 map 应用

java - 如何在android中有一个IF OR?

java - Android 项目中的 Creative SDK 图像编辑器 UI