【问题标题】:Start app when screen off屏幕关闭时启动应用程序
【发布时间】:2013-01-21 09:18:26
【问题描述】:

我想在屏幕关闭时打开我的 MainActivity 类。为了做到这一点,我做了两堂课 ScreenReceiver.java 处理屏幕关闭和屏幕开启意图:

public class ScreenReceiver extends BroadcastReceiver {

 private 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, UpdateService.class);
        i.putExtra("screen_state", screenOff);
        context.startService(i);
    }

}

以及用于实现 ScreenReceiver 的 UpdateService:

public  class UpdateService extends Service {

@Override
public void onCreate() {
    super.onCreate();
    // register receiver that handles screen on and screen off logic
    IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
    filter.addAction(Intent.ACTION_SCREEN_OFF);
    BroadcastReceiver mReceiver = new ScreenReceiver();
    registerReceiver(mReceiver, filter);
}

public void onStart(Context context, Intent intent, int startId) {
    boolean screenOn = intent.getBooleanExtra("screen_state", false);
    if (!screenOn) {
        // your code
         Intent intent11 = new Intent(context,MainActivity.class);
         intent11.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         context.startActivity(intent11);
    } else {
        // your code
        Intent intent11 = new Intent(context,MainActivity.class);
        intent11.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    }
}

@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}

}

所以,当我安装我的应用程序时,屏幕关闭时没有任何事件。请告诉我问题。

【问题讨论】:

    标签: android screen


    【解决方案1】:

    您是否在应用程序的某处前台启动了 UpdateService??

    【讨论】:

      【解决方案2】:

      首先,意图ACTION_SCREEN_OFFACTION_SCREEN_ON 只能由通过函数registerReceiver() 注册的接收者处理。在 manifest.xml 中定义 IntentFilter 不适用于这些意图。

      然后,您需要确保在您的应用程序中调用UpdateService:onCreate(),否则永远不会调用ScreenReceiver:onReceiver()。你可能想在获取意图时这样做BOOT_COMPLETED

      你可以把代码改成这样,别忘了在 manifest 中定义服务:

      public class UpdateService extends Service {
      
          BroadcastReceiver mReceiver = new BroadcastReceiver {
          private 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;
              }
              handleScreenAction(screenOff);
          }
      
          private void handleScreenAction(boolean screenOff) {
              if (screenOff) {
                  // your code
                  Intent intent11 = new Intent(context,MainActivity.class);
                  intent11.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                  context.startActivity(intent11);
              } else {
                  // your code
                  Intent intent11 = new Intent(context,MainActivity.class);
                  intent11.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
              }
          }
      
          @Override
          public void onCreate() {
              super.onCreate();
              // register receiver that handles screen on and screen off logic
              IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
              filter.addAction(Intent.ACTION_SCREEN_OFF);
              registerReceiver(mReceiver, filter);
          }
      
          @Override
          public void onDestory() {
              super.onDestory();
              unRegisterReceiver(mReceiver);
          }
      
          public void onStart(Context context, Intent intent, int startId) {
          }
      
          @Override
          public IBinder onBind(Intent intent) {
          // TODO Auto-generated method stub
              return null;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2013-10-01
        • 1970-01-01
        • 2011-01-03
        • 2016-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-09
        • 1970-01-01
        相关资源
        最近更新 更多