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”

激活锁定是保持设备上