2017-10-09 180 views
0

我有两个设备。一个是运行API 26,另一个是API 21.我正在使用Google的firebase进行通知。除非我先打开应用程序,否则API 26设备不会收到推送通知。然后它收到一切正常。我不必先打开应用程序以接收API 27设备上的推送通知。任何想法,即使不打开应用程序,如何始终接受推送?我希望只需打开手机即可通知用户。在android中关闭应用程序时不会显示推送通知

private void sendNotification(String title, String messageBody, String clickAction) { 

    NotificationManager notificationManager = 
      (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
    String id = ""; 
    if (Build.VERSION.SDK_INT >= 26) { 
     id = "my_channel_01"; 
     // The user-visible name of the channel. 
     CharSequence name = "myChannel"; 
     // The user-visible description of the channel. 
     String description = ""; 
     int importance = NotificationManager.IMPORTANCE_HIGH; 
     NotificationChannel mChannel = new NotificationChannel(id, name,importance); 
     // Configure the notification channel. 
     mChannel.setDescription(description); 
     mChannel.enableLights(true); 
     // Sets the notification light color for notifications posted to this 
     // channel, if the device supports this feature. 
     mChannel.setLightColor(Color.RED); 
     mChannel.enableVibration(true); 
     mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400}); 
     notificationManager.createNotificationChannel(mChannel); 
    } 


    Intent intent = new Intent(this, MainActivity.class); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent, 
      PendingIntent.FLAG_ONE_SHOT); 

    String channelId = getString(R.string.default_notification_channel_id); 
    Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    NotificationCompat.Builder notificationBuilder = 
      new NotificationCompat.Builder(this, id) 
        .setSmallIcon(R.mipmap.ic_launcher) 
        .setContentTitle(title) 
        .setContentText(messageBody) 
        .setAutoCancel(true) 
        .setSound(defaultSoundUri) 
        .setContentIntent(pendingIntent); 


    notificationManager.notify(1 /* ID of notification */, notificationBuilder.build()); 


} 
+0

你是如何从firebase发送通知的?它来自控制台还是API? – zihadrizkyef

+0

我使用api发送邮件请求 – RobOhRob

回答

0

添加BootBroadcastReceiver清单文件

<receiver 
      android:name=".OnBootBroadcastReceiver"> 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED"/> 
      </intent-filter> 
</receiver> 

创建下列Java文件。在其中调用FirebaseMessagingReceiveService。

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 

public class OnBootBroadcastReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Intent i = new Intent("com.demo.FirebaseMessagingReceiveService"); 
     i.setClass(context, FirebaseMessagingReceiveService.class); 
     context.startService(i); 
    } 
} 
+0

Hello Genius。谢谢!不确定为什么这不包含在任何有关FireBase消息的教程中。 – RobOhRob

相关问题