2013-01-21 72 views
2

我想在屏幕关闭时打开我的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); 
    } 

} 

而且UpdateService实施ScreenReceiver:

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; 
} 

}

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

回答

0

你是否在应用程序的某个地方在前台启动了UpdateService?

0

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

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

您可以更改代码,这一点,不要忘了在清单定义服务:

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; 
    } 
} 
相关问题