2015-12-04 2 views
1

Я написал следующий код, чтобы ежедневно запускать службу трансляции в 9.0 и 3.30. но он всегда запускается только один раз. пожалуйста, дайте мне знать, что я сделал неправильно. заранее спасибо. Я использовал настройки, чтобы проверить, установлен ли сигнал тревоги или нет, и затем он пропускает. это означает, что приложение не должно устанавливать будильник каждый раз, когда это выполняется.Андроид не работает каждый день, так как он должен

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     @SuppressWarnings("unused") 
     DatabaseHandler db = new DatabaseHandler(getApplicationContext()); 

     pref2 = getSharedPreferences(PREFS_N, MODE_PRIVATE); 
     hh = pref2.getString(PREFS_USER, Da); 

     if (hh.equals(Da)) { 
      new update().execute(); 
     } else { 
      Log.i("ssssssssssssssssss", hh); 

      dates = (TextView) findViewById(R.id.date); 
      buy = (TextView) findViewById(R.id.fbuying_rate); 
      sell = (TextView) findViewById(R.id.fselling_rate); 
      Ebuy = (TextView) findViewById(R.id.ebuying_rate); 
      Esell = (TextView) findViewById(R.id.eselling_rate); 

      buy.setText(pref2.getString(PREFS_FBUY, "")); 
      sell.setText(pref2.getString(PREFS_FSELL, "")); 
      Ebuy.setText(pref2.getString(PREFS_EBUY, "")); 
      Esell.setText(pref2.getString(PREFS_ESELL, "")); 
      dates.setText(pref2.getString(PREFS_DATE, "")); 

     } 
     pref = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); 

     kk = pref.getString(PREFS_USERNAME, De); 

     Log.i("gasf", kk); 
     if (kk.equals(De)) 

     { 

      Calendar updateTime = Calendar.getInstance(); 
      updateTime.set(Calendar.HOUR_OF_DAY, 9); 
      updateTime.set(Calendar.MINUTE, 30); 

      Intent alarm = new Intent(this, AlarmReceiver.class); 
      int i = 23; 
      AI = PendingIntent.getBroadcast(this, i, alarm, PendingIntent.FLAG_CANCEL_CURRENT); 
      am = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
      am.setInexactRepeating(AlarmManager.RTC_WAKEUP, updateTime.getTimeInMillis(), AlarmManager.INTERVAL_DAY, AI); 


      Calendar updateTime2 = Calendar.getInstance(); 
      updateTime2.set(Calendar.HOUR_OF_DAY, 15); 
      updateTime2.set(Calendar.MINUTE, 30); 

      Intent alarm2 = new Intent(this, AlarmReceiver.class); 
      int i2 = 32; 
      AI2 = PendingIntent.getBroadcast(this, i2, alarm2, PendingIntent.FLAG_CANCEL_CURRENT); 
      am2 = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
      am2.setInexactRepeating(AlarmManager.RTC_WAKEUP, updateTime2.getTimeInMillis(), AlarmManager.INTERVAL_DAY, AI2); 


      getSharedPreferences(PREFS_NAME, MODE_PRIVATE).edit().putString(PREFS_USERNAME, "lol").commit(); 
     } 
     lvCustomList = (ListView) findViewById(R.id.lv_custom_list); 
     showList(); 

    } 
+0

См: http://stackoverflow.com/a/30812993/295004 –

ответ

1

am2.setInexactRepeating - вещь! Разве это не объяснительно? Вам нужен setExact()/setRepeating() (в зависимости от вашего случая использования) - Для получения дополнительной информации посетите мой другого ответ here

setInexactRepeating, является OS и дружественная батарея, она ПАРТИИ вместе всей работы, которая будет сделана на сигнализации получить и работает один за другим, а в то время как setRepeating мгновенно запускает сигнал тревоги Также примечание: Аварийные сигналы стираются после перезагрузки телефона, возможно, вам придется реализовать приемник для вещания, чтобы сделать его постоянным. Убедитесь, что вы не выполняете эту рабочую среду, вам нужно реализовать ее в Manifest else, когда ваше приложение не находится в фоновом режиме, вы не получите никаких передач.

+0

эй, я сделал попробовать тот же код с setRepeating() и так же, AI = PendingIntent.getBroadcast (это, я, сигнализация, PendingIntent. FLAG_UPDATE_CURRENT); все же это не сработало для меня – checkmate

+0

Пожалуйста, обратитесь к документам о том, как работают сигналы тревоги и выше API 19. Вам нужно управлять этим вручную. Также расскажите о своей тестовой среде. – Skynet

+0

Я тестирую API 17. Нацеливаю его на api 23. min api 8. Как вы можете видеть в моем коде, вы думаете, что я написал что-то не так? – checkmate