2014-10-27 4 views
1

У меня есть задание, чтобы начать деятельность от службы, и я использую следующий код:Начало деятельности от службы андроида

KeyguardManager km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); 
    final KeyguardManager.KeyguardLock kl = km .newKeyguardLock("MyKeyguardLock"); 
    kl.disableKeyguard(); 

    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
    WakeLock wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK 
            | PowerManager.ACQUIRE_CAUSES_WAKEUP 
            | PowerManager.ON_AFTER_RELEASE, "MyWakeLock"); 
    wakeLock.acquire(); 
    Intent i = new Intent(this, someActivity.class); 
    i.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED + WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD + WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON + WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 
    i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    i.addCategory(Intent.CATEGORY_LAUNCHER); 
    i.putExtra("someName", theName); 
    startActivity(i); 

Это прекрасно работает, когда приложение устанавливается в фоновом режиме. Но когда приложение закрыто, служба только разблокирует телефон, но не начинает мою деятельность. У любого из вас есть идея, как добиться необходимой функциональности. Заранее спасибо!

EDIT> Проблема находится где-то в фазе разблокировки. При первом событии телефон разблокируется, но не запускает активность. Во втором случае, если телефон разблокирован, начинается действие.

+0

Возможный дубликат http://stackoverflow.com/questions/3606596/android-start-activity-from-service – mithrop

+0

возможно разблокировать, зарегистрироваться для ' ACTION_USER_PRESENT', а в широковещательном приемнике начнет свою деятельность? – njzk2

+0

Я не уверен, что этот комплекс –

ответ

2

Используйте этот код Это поможет вам.

Intent i = new Intent(context,MainActivity.class); 
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
context.startActivity(i); 

// Больше Разъяснение Во-первых, проверьте ваше приложение работает или нет. Если ваше приложение не работает, позвоните по этому коду.

Intent i = new Intent(context,MainActivity.class); 
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
context.startActivity(i); 

Если работает, то используйте этот код

Intent i = new Intent(context,MainActivity.class);  
context.startActivity(i); 
+0

Проблема находится где-то в фазе разблокировки. При первом событии телефона телефон разблокируется, но dosnt начинает свою деятельность. Во втором случае, если телефон разблокирован, начинается действие. –

+0

Хорошо. Вы можете использовать флаг для сценария блокировки/разблокировки и сохранить его в разделяемом prefrence. В классе сервиса вы должны проверить флаг, а затем использовать мою концепцию выше. – samsad

Смежные вопросы