2017-02-02 12 views
2

Я знаю, что это дублирующий вопрос, но я пробовал все доступные решения в Интернете, но не смог найти решение.Повторяющийся сигнал тревоги не работает на реальных устройствах, но работает в эмуляторе

файл манифеста

<receiver android:name=".UpdateTables" 
      android:enabled="true" 
      android:exported="true"> 

      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      </intent-filter> 

     </receiver> 

вызова этого метода в onCreate() из mainActivity .java, и я также пытался вызвать метод из класса приложения.

private void setTheTimeToUpdateTables(Context context) { 

    Log.i("Update table function","Yes"); 

    AlarmManager alarmManager=(AlarmManager) getSystemService(ALARM_SERVICE); 

    Intent alarmIntent=new Intent(context,UpdateTables.class); 

    PendingIntent pendingIntent=PendingIntent.getBroadcast(context,0,alarmIntent,PendingIntent.FLAG_UPDATE_CURRENT); 

    //alarmManager.cancel(pendingIntent); 

    Calendar alarmStartTime = Calendar.getInstance(); 

    alarmStartTime.setTimeInMillis(System.currentTimeMillis()); 

    //midnight 
    alarmStartTime.set(Calendar.HOUR_OF_DAY, 0); 
    alarmStartTime.set(Calendar.MINUTE, 1); 
    alarmStartTime.set(Calendar.SECOND, 0); 

    if(Calendar.getInstance().getTimeInMillis()>alarmStartTime.getTimeInMillis()) 
    { 
     alarmStartTime.add(Calendar.DATE,1); 
    } 

    Log.i("TIME IS ",Long.toString(alarmStartTime.getTimeInMillis())); 


    System.out.println("Updating table time "+alarmStartTime); 
    System.out.println("Time in millseconds "+alarmStartTime.getTimeInMillis()); 


    alarmManager.setInexactRepeating(AlarmManager.RTC,alarmStartTime.getTimeInMillis(),AlarmManager.INTERVAL_DAY,pendingIntent); 

    Log.d("Alarm","Set for midnight"); 

} 


    public class UpdateTables extends BroadcastReceiver { 

     //midnight saga 

     DbHelper dbHelper; 
     ArrayList<ListMedicine> reminderInfo; 
     private SharedPreferences sharedPreferences; 
     private static AlarmManager alarmManager; 

     private static void init(Context ctx){ 
      if (alarmManager==null) 
       alarmManager=(AlarmManager) ctx.getSystemService(Activity.ALARM_SERVICE); 
     } 

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

     Log.i("Update tables","yes"); 

    } 

Когда приложение закрыто, его приемник вещания updatetables не будет звонить.

вывод ./adb shell dumpsys alarm перед закрытием приложения.

RTC#5: Alarm{28e47fec type 1 when 1487010660087 user.com.hlthee} 
    tag=*alarm*:user.com.hlthee/.UpdateTables 
    type=1 whenElapsed=+23h48m35s946ms when=2017-02-14 00:01:00 
    window=-1 repeatInterval=86400000 count=0 
    operation=PendingIntent{24cc8fb5: PendingIntentRecord{19e0864a user.com.hlthee broadcastIntent}} 

Но когда приложение закрыто от недавней активности, эта запись также удаляется. Зачем? вот почему не срабатывает тревога, когда приложение закрыто. Любая помощь будет оценена по достоинству.

+1

Вы должны использовать фоновую службу. –

+0

Можете привести пример. @ReazMurshed .. –

+0

Я думаю, что радиопередатчик также работает в фоновом режиме @ReazMurshed. Возможно, я ошибаюсь. –

ответ

0

определить имя пользовательских действий, таких как:

public static final String MY_ACTION = "com.sample.myaction" 

создать BroadcastReceiver:

public class MyAlarmReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
    if (intent.getAction().equals(MY_ACTION)) { 
     // Do something here 
    } 
}  

}

Зарегистрируйте приемник на вашем AndroidManifest.xml:

<receiver android:name="com.sample.MyAlarmReceiver"> 
<intent-filter> 
    <action android:name="com.sample.myaction"/> 
</intent-filter> 

установка сигнализации, используйте следующую PendingIntent:

Intent i = new Intent(MY_ACTION); 
PendingIntent pi = PendingIntent.getBroadcast(getApplicationContext(), 0, i, 0); 

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

  • Нет связанных вопросов^_^