1

я не могу это получить и работает:Мои AlarmManager, BroadcastReceiver и служба не запускается

public class BackgroundSyncService extends IntentService { 

    public BackgroundSyncService() { 
     super("SchedulingService"); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     Log.i("asd-service", "lol"); 

     BackgroundSyncBroadcastReceiver.completeWakefulIntent(intent); 
    } 
} 

Второй класс:

public class BackgroundSyncBroadcastReceiver extends WakefulBroadcastReceiver { 

    private AlarmManager alarmManager; 
    private PendingIntent alarmIntent; 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     Intent service = new Intent(context, BackgroundSyncService.class); 
     startWakefulService(context, service); 
    } 

    public void setAlarm(Context context){ 

     alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
     Intent intent = new Intent(context, BackgroundSyncBroadcastReceiver.class); 
     alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0); 

     alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, 
       0, 5000, alarmIntent); 

     ComponentName receiver = new ComponentName(context, BackgroundSyncBroadcastReceiver.class); 
     PackageManager pm = context.getPackageManager(); 

     pm.setComponentEnabledSetting(receiver, 
       PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 
       PackageManager.DONT_KILL_APP); 
    } 
} 

Третий класс:

public class BackgroundSyncBootReceiver extends BroadcastReceiver { 

BackgroundSyncBroadcastReceiver service = new BackgroundSyncBroadcastReceiver(); 

@Override 
public void onReceive(Context context, Intent intent) { 
    if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){ 
     service.setAlarm(context); 
    } 
} 

}

Manifest.xml:

<receiver android:name=".BackgroundSyncBroadcastReceiver"/> 

    <receiver android:name=".BackgroundSyncBootReceiver" 
     android:enabled="true"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED"/> 
     </intent-filter> 
    </receiver> 

    <service android:name=".BackgroundSyncService"/> 

ответ

0

Так что, да, я забыл, чтобы запустить его из acivity ...

BackgroundSyncBroadcastReceiver service = new BackgroundSyncBroadcastReceiver(); 
service.setAlarm(this); 

глупой ошибки.

+1

, пожалуйста, примите этот ответ, чтобы получить этот вопрос из списка «неотвеченные вопросы». –

0

Ваш ресивер для BOOT_COMPLETED не будет пущен, пока ваше приложение не будет вручную запущено пользователем один раз. Это функция безопасности, предотвращающая запуск приложений, не зная о них.

+0

Я вышел из приложения и запустил его снова вручную с устройства. Еще не повезло:/ –

+0

Теперь иногда он работает, когда-то нет - я понял, что перезапуск устройства помогает немного, но он не должен работать так. Может ли это выражение 'if' в' BackgroundSyncBootReceiver' быть блокирующим здесь? Что произойдет, если я просто уйду без каких-либо условий? –

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