我一直在做一些研究,当收到推送通知时,android
在唤醒屏幕(点亮设备屏幕)时看起来有点严格。
我希望实现的是一个短信通知,它会打开屏幕,声音和振动。但我的推送通知只是响铃或振动。是否可以在Cordova中唤醒设备?我正在使用pubnub作为后端。
这是我的样本fcm有效载荷:
var pushPayload = {
"message": "Some message",
"user_id": "1",
"pn_gcm" : {
"priority" : "high",
"data" : {
"title":"Notification title",
"body":"You are a winner!",
"room" : "Room name",
//"count" : 5,
"content-available":"1",
"force-start": "1",
"priority":2
}
}
};
这是我的AndroidManifest.xml
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="27" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
我正在使用phonegap-plugin-push
。
Android设备有自己的通知偏好设置,有些设备无法被您的应用覆盖。 “环境显示”设置将在通知时唤醒屏幕,但这是必须在手机设置中打开的功能。
好吧,我最终创建了自己的cordova插件,只是为了处理唤醒屏幕。这是我在插件中使用的代码:
Context context = this.cordova.getActivity().getApplicationContext();
PowerManager powerManager = (PowerManager) context.getSystemService(context.POWER_SERVICE);
boolean result= Build.VERSION.SDK_INT>= Build.VERSION_CODES.KITKAT_WATCH&&powerManager.isInteractive()|| Build.VERSION.SDK_INT< Build.VERSION_CODES.KITKAT_WATCH&&powerManager.isScreenOn();
if (!result){
PowerManager.WakeLock wl = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK |PowerManager.ACQUIRE_CAUSES_WAKEUP |PowerManager.ON_AFTER_RELEASE,"MH24_SCREENLOCK");
wl.acquire(10000);
PowerManager.WakeLock wl_cpu = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"MH24_SCREENLOCK");
wl_cpu.acquire(10000);
}`
所以,在notification
事件中,我调用了我的插件:
`push.on('notification',function(data){
//call wakeup screen
window.plugins.wakeUpScreen.wakeup(function() {
console.log('Wake up!');
}, function(err) {
console.log('Wake up error: ' + err);
});
}); `