2013-01-21 2 views
2

화면이 꺼져있을 때 MainActivity 클래스를 열고 싶습니다.화면이 꺼지면 앱 시작

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

을}

그래서, 때 위해 내가 두 클래스 ScreenReceiver.java이 텐트 ON & 화면을 OFF 화면 처리 할 수 ​​있도록 그렇게하기 내 앱을 설치하면 화면이 꺼져도 이벤트가 없습니다. 저에게 문제를 보여주십시오.

답변

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; 
    } 
} 
관련 문제