我正在构建一个紧急安全Android应用程序。其中一个重要的要求是播放推送通知的警报声音。这种情况很少发生,所以很可能应用程序不会运行(可能强制停止),设备可能被锁定或处于睡眠模式。
我正在使用FCM发送这样的推送通知:
public class NotificationManager extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
playAlarmSound();
}
}
我的Service是这样的:
<service
android:name=".notification.NotificationManager"
android:directBootAware="true"
android:exported="true">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
但是,只有当设备未锁定时,我才会收到通知。怎样才能保证这一点呢?
我看到了一些使用警报管理器的帖子&前台服务——但我不想因为一个不经常(但非常重要)的用例而持续运行和消耗电池?
我建议使用自定义声音,这样您就可以播放警报声音。将其设置为高优先级,以便即使设备处于休眠模式,FCM也会立即尝试传递它。
然而,如果你仍然考虑使用闹钟管理器,你可以看看这些关于电池使用的帖子:
- Android:正确使用AlarmManager而不耗尽电池
- 关于alarmManager和性能/电池问题