0

В моем приложении я использую AlarmManager для передачи информации о сохранении каждый день один раз в день. Я использую следующий код для запуска AlaramManagerAlarmManager Не работает, когда активность в фоновом режиме

следующего å
 Calendar calendar = DateUtils 
      .getNextKeepAliveTime(keepAliveHours, keepAliveMinutes); 
    Intent intent = new Intent(this, AlarmReceiver.class); 
    PendingIntent sender = PendingIntent.getBroadcast(getApplicationContext(), 
      ALARM_REQUEST_CODE, intent, 0); // PendingIntent.FLAG_UPDATE_CURRENT); 

    // Get the AlarmManager service 
    Log.d(TAG, "cal: " + calendar.toString()); 
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
    long diff = calendar.getTimeInMillis() - System.currentTimeMillis(); 
    if(diff < 0) diff = AlarmManager.INTERVAL_FIFTEEN_MINUTES; 
    am.setInexactRepeating(AlarmManager.RTC_WAKEUP, diff, AlarmManager.INTERVAL_DAY, sender); 

Когда активность идет фон, приемник, AlarmReceiver, не получают какое-либо событие. Но он успешно работает, когда работает на переднем плане. Ther декларация приемник в моем манифеста -

<receiver android:name="MainActivity$AlarmReceiver" android:enabled="true" /> 

манифеста является

<?xml version="1.0" encoding="utf-8"?> 

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="8" /> 

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.SEND_SMS" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.INTERNET" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.yachtdroid.ba.MainActivity" 
     android:label="@string/app_name" 
     android:launchMode="singleInstance" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name="com.yachtdroid.ba.ui.Settings" > 
    </activity> 
    <receiver android:name="MainActivity$ChargingOnReceiver" android:enabled="true"> 
     <intent-filter> 
     <action android:name="android.intent.action.ACTION_POWER_CONNECTED" /> 
     <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" /> 
    </intent-filter> 
    </receiver> 
    <service android:name="com.yachtdroid.ba.services.MailSenderService" /> 
    <service android:name="com.yachtdroid.ba.services.SmsSender" /> 

    <activity android:name="com.yachtdroid.ba.ui.YDSiteView" /> 
    <activity 
     android:name="com.yachtdroid.ba.ui.BatteryAlertDialog" 
     android:theme="@style/NoTitleDialog" /> 
    <activity 
     android:name="com.yachtdroid.ba.ui.ActivityLog" 
     android:theme="@style/NoTitleDialog" /> 
    <receiver android:name="MainActivity$AlarmReceiver" android:enabled="true" /> 
     <!-- intent-filter> 
      <action android:name="alarm_action"/> 
     </intent-filter> 
    </receiver --> 
</application> 

Код приемника

public static class AlarmReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d(TAG, intent.getExtras().toString()); 
     if (!inForeground) { 
      Log.d(TAG, "*** Move app to front!"); 
      Intent it = new Intent("intent.my.action"); 
      it.setComponent(new ComponentName(context.getPackageName(), 
        MainActivity.class.getName())); 
      it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK 
        | Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      context.getApplicationContext().startActivity(it); 
     }   
     try { 
      Toast.makeText(context, "alarm message", Toast.LENGTH_SHORT).show(); 
      MainActivity.instance.sendKeepALive(); 
     } catch (Exception e) { 
      Toast.makeText(
        context, 
        "There was an error somewhere, but we still received an alarm", 
        Toast.LENGTH_SHORT).show(); 
      e.printStackTrace(); 
     } 
    } 
} 

Как это можно решить? Thanks, Eyal.

+0

Вы уверен, что приемник не вызван? Откуда вы знаете? Отправьте код из своего класса AlarmReceiver и вашего манифеста. –

+0

Привет, Дэвид, я использую отладчик для этой цели, я также вставляю Toast в приемник и регистрирую файл журнала. Я использую следующую команду в своем манифесте - eyal

+0

Пожалуйста, разместите код для 'onReceive()'. Не комментируйте, просто отредактируйте свой вопрос. Вы также можете поместить туда запись манифеста. –

ответ

0

Попробуйте удалить код для вещательного приемника от деятельности, сделать еще один файл Java и поместить его там, а также изменить ваш манифест, согласно этого

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

вместо

<receiver android:name="MainActivity$AlarmReceiver" android:enabled="true" /> 
Смежные вопросы