屏幕锁定时通知振动,声音

时间:2016-06-07 06:38:02

标签: android google-cloud-messaging android-notifications

问题

我正在接收GCM通知,但是当我的屏幕被锁定或关闭时,我的振动和声音无法正常工作。 我试图添加唤醒锁,但是通过GCMListenerService的外观,在触发通知时已经有了一个清醒的意图。 我该怎么做才能让它发挥作用?我遗失的那一块在哪里?

编辑

  • 当屏幕开启和解锁时,我的振动会起作用。
  • 我发现部分GcmListenerService负责接收GCM推送通知,看起来wakelock被删除了(下面的代码)

Bundle var2 = var1.getExtras(); var2.remove("message_type"); var2.remove("android.support.content.wakelockid");

CODE

    Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.ic_notification_icon)
            .setContentTitle(getString(R.string.new_notification))
            .setContentText(body)
            .setAutoCancel(true)
            .setSound(defaultSoundUri)
            .setVibrate(new long[] {1000, 1000, 1000})
            .setColor(ContextCompat.getColor(getApplicationContext(), R.color.colorPrimary))
            .setContentIntent(pendingIntent);

    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    Notification notification = notificationBuilder.build();
    notification.defaults |= Notification.DEFAULT_VIBRATE;
    notification.defaults |= Notification.DEFAULT_SOUND;

    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG");
    wl.acquire(10000);

    notificationManager.notify(0, notification);

4 个答案:

答案 0 :(得分:0)

您需要在服务器端代码中添加此标志delay_while_idle=true。 见here

答案 1 :(得分:0)

所以事实证明,当您的通知包含data payloadnotification payload时,Android处于锁定模式时即使您从Playload创建通知,即使您已为自定义代码编码。

不需要唤醒锁 - GcmListenerService只要你有<uses-permission android:name="android.permission.WAKE_LOCK" />

就会自行决定它是否属于自己

答案 2 :(得分:0)

我正在使用FCM,经过大量的努力(我猜测缺少文档)后,我通过从发送到FCM的字段中删除通知来解决问题,并且仅使用$fields = array( 'to' => 'topics/all', 'data' => array( 'priority' => 'high', 'title' => $title, 'body' => $body, 'type' => $type)); 。这是我的代码与php:

high

此外,您必须将优先级设置为def moving_average(df, col_name='Price', k=3): ma_cols = [] mb_cols = [] temp_df = DataFrame() for i in range(0, k+1): ma_col = 'M_A_{}'.format(i) ma_cols.append(ma_col) mb_col = 'M_B_{}'.format(i) mb_cols.append(mb_col) temp_df[ma_col] = df[col_name].shift(i) temp_df[mb_col] = df[col_name].shift(-i) df['M_A'] = temp_df[ma_cols].mean(axis=1, skipna=True, numeric_only=True) df['M_B'] = temp_df[mb_cols].mean(axis=1, skipna=True) print (df) return df moving_average(df) ,以便在设备锁定时振铃并振动。

答案 3 :(得分:0)

确保已在清单文件中声明了默认通知通道。

<meta-data android:name="com.google.firebase.messaging.default_notification_channel_id" 
           android:value="YOUR_CHANNEL_ID"/>