1

我設置了時間控制報警管理器。我的目的是繼續在屏幕上控制時間。 當屏幕上一切正常但是當我鎖定裝置(屏幕)我的廣播接收器不接收器什麼報警管理器沒有在屏幕上觸發關閉

我試過很多不同的解決方案(在清單導出:虛假或過程:「:遠程」)約類似的問題,但問題沒有解決。我需要幫助。我希望以前有人解決過這個問題。

對於設定的報警經理

AlarmManager alarmManager = (AlarmManager)    
    context.getSystemService(Context.ALARM_SERVICE); 

    Intent intent = new Intent(context, TimeService.class); 
    intent.setAction(SETUP_TIMER_FOR_NOTIFICATION); 

    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 112, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    long now = System.currentTimeMillis(); 
    long minute = 1000 * 60; 

    alarmManager.cancel(pendingIntent); 
    alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() , minute, pendingIntent); 

我的收款人

public class TimeService extends WakefulBroadcastReceiver { 

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



Log.i("TimeService", "onReceive"); 

Intent timeIntent = new Intent(context, NotificationService.class); 
     timeIntent.setAction(SETUP_TIMER_FOR_NOTIFICATION); 

     startWakefulService(context, timeIntent); 


    } 
} 

的Manifest.xml

<receiver 
      android:name="service.TimeService" 
      android:enabled="true" 
      android:exported="false" 
      > 

      <intent-filter> 
       <action android:name="alarm_timer_for_notification" /> 
      </intent-filter> 
     </receiver> 
+0

你可以檢查你的設備,如果它的「節電模式」是在一個機制?如果其打開,然後將其關閉,然後嘗試。問題可能在別的地方,但我最近遇到了這樣的問題。 –

+0

我在電池節能模式下關閉了我的應用程序,但警報重複不起火。 – Saravanan

+0

@SharpEdge,@ Saravanan我允許我運行電池省電模式,但沒有任何改變 – gokhan

回答

1

setAndAllowWhileIdle這是工作時,屏幕關閉和手機處於空閒模式

在棉花糖介紹打盹模式節省電池。所以鬧鈴在重複模式下沒有正確觸發。

因此我們使用 https://developer.android.com/reference/android/app/AlarmManager.html#setAndAllowWhileIdle(int,%20long,%20android.app.PendingIntent)

從棉花糖及以上,報警喚醒只有10分鐘的間隔,setAndAllowWhileIdle也是消防供水系統或通知10分鐘一次,當手機處於空閒狀態(屏幕關閉)。

在正常模式下的時間間隔工作正常(我已經檢查3分鐘的間隔)

public class TimeService extends WakefulBroadcastReceiver { 

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

    Log.i("TimeService", "onReceive"); 

    Intent timeIntent = new Intent(context, NotificationService.class); 
    timeIntent.setAction(SETUP_TIMER_FOR_NOTIFICATION); 

    startWakefulService(context, timeIntent); 

    setAlarm(context); 
} 

public void setAlarm(Context context) 
{ 
    Timber.v(TAG +"set Alarm"); 
    PreferencesHelper preferencesHelper =new PreferencesHelper(context); 
    AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
    Intent intent = new Intent(context, TimeService.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0); 
    int intervalInMinutes = preferencesHelper.getInt(context.getResources().getString(R.string.sha_loc_intervals), 1)* 60000; 
     if (android.os.Build.VERSION.SDK_INT >= 23) { 
     alarmManager.setAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
       SystemClock.elapsedRealtime()+intervalInMinutes , pendingIntent); 
    } else if (android.os.Build.VERSION.SDK_INT >= 19 
      && android.os.Build.VERSION.SDK_INT < 23) { 
     alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+intervalInMinutes , pendingIntent); 
    } else { 
     alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+intervalInMinutes , pendingIntent); 
    } 
} 

public void cancelAlarm(Context context) 
{ 
    Timber.v(TAG +"cancel Alarm"); 
    Intent intent = new Intent(context, TimeService.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0); 
    AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
    alarmManager.cancel(pendingIntent); 
}} 

<receiver android:name=".TimeService" 
       android:enabled="true" 
       android:exported="true" 
       android:process=":remote"> 
</receiver> 

MainActivity.class

TimeService timeService =新TimeService();

timeService.setAlarm(MainActivity.this);

0

您想獲取清單文件的權限。

使用許可權的android:NAME =「android.permission.WAKE_LOCK」

激活鎖定是保持設備上