2016-02-23 5 views
0

У меня возникли некоторые трудности с выполнением службы, которая должна запускаться периодически. Приложение работает нормально, когда экран включен, и даже если приложение удалено из последних задач. Но когда устройство заблокировано, приложение останавливается и даже когда экран снова включается, служба не возвращается. Я реализовал WakefulBroadcastReceiver с действием для SCREEN_ON, но он работает только тогда, когда приложение остается в живых, оно не работает, когда работает только служба. Служба и WakefulBroadcastReceiver объявляются, как это в моем AndroidManifest:AlarmManager не работает, когда экран заблокирован

<service android:name=".FeedService" /> 
<receiver android:name=".AutoStart"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     <action android:name="android.intent.action.SCREEN_ON" /> 
    </intent-filter> 
</receiver> 

Я также добавил следующие разрешения моего AndroidManifest файла:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

Это мой WakefulBroadcastReceiver:

public class AutoStart extends WakefulBroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d("Feed", "AutoStart.onReceive"); 
     context.startService(new Intent(context, FeedService.class)); 
    } 
} 

И это моя служба:

public class FeedService extends Service { 
    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Log.d("Feed", "FeedService.onStartCommand"); 
     stopSelf(); 
     return START_STICKY; 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     Log.d("Feed", "FeedService.onBind"); 
     return null; 
    } 

    @Override 
    public void onDestroy() { 
     // I want to restart this service again in 5 seconds 
     AlarmManager alarm = (AlarmManager)getSystemService(ALARM_SERVICE); 
     alarm.set(
       alarm.RTC_WAKEUP, 
       System.currentTimeMillis() + (5000), 
       PendingIntent.getService(this, 0, new Intent(this, FeedService.class), 0) 
     ); 
    } 
} 

В моей MainActivity я запустить службу с:

AlarmManager alarm = (AlarmManager)getSystemService(ALARM_SERVICE); 
     alarm.set(
       alarm.RTC_WAKEUP, 
       System.currentTimeMillis() + (5000), 
       PendingIntent.getService(this, 0, new Intent(this, FeedService.class), 0) 
     ); 

Это важно для моего приложения, останавливать эту службу, и я не понимаю, почему это не происходит. Может ли кто-нибудь объяснить мне, как я могу это решить?

ответ

0

Я нашел ответ на свою проблему. По какой-то причине, даже если я запросил WAKE_LOCK в файле манифеста и зарегистрировал мой BroadcastReceiver в Activity, у моего приложения нет разрешения продолжать жить после блокировки экрана. Я нашел вариант на своем устройстве, где его можно указать в настройках> защищенных приложений. Поэтому я просто проверил этот вариант, теперь моя служба работает нормально. Я не знаю, автоматически ли этот параметр проверяется, когда приложение установлено из Google Play (надеюсь, так), но этот вариант не был проверен в моем случае.

+0

Нет, это не будет автоматически проверено –

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