[英]Why Sound is not ringing when app is in background(Firebase Push Notification in Android app)?
When push notification is coming then sound and vibration working only when app is open. 当推送通知到来时,声音和振动仅在打开应用程序时有效。 But when I kill my app or minimized it then only notification sound and vibrate coming if I send it from Firebase console.
但是,当我杀死我的应用程序或将其最小化时,如果我从Firebase控制台发送它,则只会发出通知声音和振动。 But if I am getting notification from php server then no sound and vibration.I have tired to many codes but same problem occur.
但是,如果我从php服务器收到通知,则没有声音和振动。我已经厌倦了很多代码,但同样会发生问题。 And I have also tried in different Android os versions phone.
而且我也尝试在不同的Android os版本的手机中使用。
This is my code which I am using to create notification. 这是我用来创建通知的代码。
public void createNotification( String title, String message,Intent intent, Uri alarmSound)
{
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Uri defaultUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel androidChannel = new NotificationChannel(CHANNEL_ID,
title, NotificationManager.IMPORTANCE_HIGH);
// Sets whether notifications posted to this channel should display notification lights
androidChannel.enableLights(true);
// Sets whether notification posted to this channel should vibrate.
androidChannel.enableVibration(true);
// Sets the notification light color for notifications posted to this channel
androidChannel.setLightColor(R.color.app_theme_color);
//androidChannel.setSound(null, null);
// Sets whether notifications posted to this channel appear on the lockscreen or not
androidChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
getManager().createNotificationChannel(androidChannel);
NotificationCompat.Builder notification = new NotificationCompat.Builder(getApplicationContext(), CHANNEL_ID)
.setSmallIcon(R.mipmap.logo)
.setContentTitle(title)
.setContentText(message)
.setTicker(title)
.setStyle(new NotificationCompat.BigTextStyle().bigText(message))
.setSound(defaultUri)
.setSound(alarmSound, STREAM_NOTIFICATION)
.setAutoCancel(true)
.setContentIntent(contentIntent);
getManager().notify(NOTIFICATION_ID, notification.build());
} else {
try {
playNotificationSound();
@SuppressLint({"NewApi", "LocalSuppress"}) NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this).setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.logo))
.setSmallIcon(R.mipmap.logo)
.setContentTitle(title)
.setTicker(title)
.setContentText(message)
.setStyle(new NotificationCompat.BigTextStyle().bigText(message))
.setContentIntent(contentIntent)
.setDefaults(Notification.DEFAULT_ALL)
.setSound(alarmSound, STREAM_NOTIFICATION)
.setLights(0xFF760193, 300, 1000)
.setAutoCancel(true)
.setVibrate(new long[]{200, 400});
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(NOTIFICATION_ID/* ID of notification */, notificationBuilder.build());
} catch (SecurityException se) {
se.printStackTrace();
}
}
}
private NotificationManager getManager() {
if (mManager == null) {
mManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
}
return mManager;
}
// Playing notification sound
public void playNotificationSound() {
try {
Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Ringtone r = RingtoneManager.getRingtone(this, notification);
r.play();
} catch (Exception e) {
e.printStackTrace();
}
}
And I have also given the permission in Manifest also. 我也已经在清单中给予了许可。
<uses-permission android:name="android.permission.VIBRATE" />
This is my php code. 这是我的PHP代码。
public function pushSurveyorNotification($send_data){
$requestJson = json_decode($send_data, true);
if (empty($requestJson)) {
generateServerResponse('0', '100');
}
$check_request_keys = array(
'0' => 'message',
'1' => 'regId',
'2' => 'apikey',
'3' => 'booking_details',
'4' => 'notification_type'
);
// $notification_type = '01';
$regId = trim($requestJson['Codruk']['regId']);
$notification_type = trim($requestJson['Codruk']['notification_type']);
$registrationId = ''; // set variable as array
// get all ids in while loop and insert it into $regIDS array
$deviceIds = explode(",", $regId);
foreach ($deviceIds as $devid) {
$registrationId .= $devid.",";
}
$message = trim($requestJson['Codruk']['message']);
$apikey = trim($requestJson['Codruk']['apikey']);
$booking_details = trim($requestJson['Codruk']['booking_details']);
$url = 'https://android.googleapis.com/gcm/send';
$fields = array(
'to' => rtrim($registrationId,","),
'notification' => array(
"title" => "Codruk",
"body" => $message
),
'data' => array(
"notification_type" => $notification_type,
"booking_details" =>json_decode($booking_details, true)
),
'priority' => "high"
);
$headers = array(
'Authorization: key=' . $apikey,
'Content-Type: application/json'
);
$data = json_encode( $fields );
// Open connection
$ch = curl_init();
// Set the url, number of POST vars, POST data
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_POST, true );
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $fields ) );
// Execute post
$result = curl_exec($ch);
// Close connection
curl_close($ch);
return $result;
}
If you are sending notification from firebase console and your app is in background onMessageReceived method will not be called inside MessagingService class. 如果您是从Firebase控制台发送通知,而您的应用程序处于后台,则不会在MessagingService类内部调用onMessageReceived方法。
Firebase will handle it at Backend. Firebase将在后端处理它。 It will send this Notification to system for displaying Notification in Notification tray.
它将此通知发送到系统以在通知托盘中显示通知。 And there will be no Notification sound even if you have enabled/allowed Notification sound for.
即使已启用/允许了通知声音,也不会有通知声音。
Basically, you need to change your notifiction code to something like this 基本上,您需要将通知代码更改为如下所示
{
“to” : “bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1…”,
“notification” : {
“body” : “great match!”,
“title” : “Portugal vs. Denmark”,
“icon” : “myicon”,
“sound” : “mySound”
}
} }
you can read more about how to do it here: Firebase Cloud Messaging Push Notifications Android tutorial 您可以在此处阅读有关操作的更多信息: Firebase Cloud Messaging推送通知Android教程
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.