从通知启动 activity 时显示空白屏幕
Blank white screen shown when starting an activity from a notification
我正在使用 Pusher(依赖于 Firebase 云消息传递)向我的 android 应用程序发送通知。当应用程序在前台时,我单击通知抽屉中收到的通知,main
activity 启动时没有任何问题。
当我通过长按后退按钮关闭应用程序时,我仍会收到通知,但是当我单击它时,会打开一个空白的白色屏幕并且应用程序仍停留在该页面上。将日志添加到我的 activity onCreate
显示它从未在这种情况下被调用。
我什至尝试在我的待定意图中设置下面的标志,但它们没有用
intent.apply {
flags = Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT or Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
}
即使在清单文件中的 activity 声明中添加 android:launchMode="singleTask"
也没有解决问题。
清单
<activity
android:name=".find.MainActivity"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar.TransparentStatus"
android:windowSoftInputMode="adjustNothing|stateAlwaysHidden"
/>
消息服务
class NotificationsMessagingService : MessagingService() {
override fun onMessageReceived(remoteMessage: RemoteMessage) {
Log.e("MessagingService", " NOTIFICATION RECEIVED")
var intent = Intent(this, MainActivity::class.java)
intent.apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP
}
sendNotification("You have a new notification",remoteMessage.notification.body, intent)
}
fun sendNotification(title: String, body: String, intent: Intent) {
val pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT)
val channelId = getString(R.string.default_notification_channel_id)
val defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
val notificationBuilder = NotificationCompat.Builder(this, channelId)
.setSmallIcon(R.drawable.app_notification)
.setContentTitle(title)
.setContentText(body)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent)
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val channel = NotificationChannel(channelId, getString(R.string.notification_title), NotificationManager.IMPORTANCE_HIGH)
notificationManager.createNotificationChannel(channel)
}
notificationManager.notify(0, notificationBuilder.build())
}
}
当应用程序在后台或被杀死时,NotificationsMessagingService
永远不会被调用。推送器将通知直接发送到通知抽屉。单击它后,将被带到应用程序启动器 activity,在我的例子中恰好是启动画面 activity。
我从初始屏幕 activity 的 onCreate
方法中获取来自 Intent 的额外通知数据并使用它,就像我收到来自 [= 的通知时所做的那样11=]
class SplashActivity : Activity(){
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (intent.extras != null) {
processIntent(intent)
}
}
我正在使用 Pusher(依赖于 Firebase 云消息传递)向我的 android 应用程序发送通知。当应用程序在前台时,我单击通知抽屉中收到的通知,main
activity 启动时没有任何问题。
当我通过长按后退按钮关闭应用程序时,我仍会收到通知,但是当我单击它时,会打开一个空白的白色屏幕并且应用程序仍停留在该页面上。将日志添加到我的 activity onCreate
显示它从未在这种情况下被调用。
我什至尝试在我的待定意图中设置下面的标志,但它们没有用
intent.apply {
flags = Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT or Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
}
即使在清单文件中的 activity 声明中添加 android:launchMode="singleTask"
也没有解决问题。
清单
<activity
android:name=".find.MainActivity"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar.TransparentStatus"
android:windowSoftInputMode="adjustNothing|stateAlwaysHidden"
/>
消息服务
class NotificationsMessagingService : MessagingService() {
override fun onMessageReceived(remoteMessage: RemoteMessage) {
Log.e("MessagingService", " NOTIFICATION RECEIVED")
var intent = Intent(this, MainActivity::class.java)
intent.apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP
}
sendNotification("You have a new notification",remoteMessage.notification.body, intent)
}
fun sendNotification(title: String, body: String, intent: Intent) {
val pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT)
val channelId = getString(R.string.default_notification_channel_id)
val defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
val notificationBuilder = NotificationCompat.Builder(this, channelId)
.setSmallIcon(R.drawable.app_notification)
.setContentTitle(title)
.setContentText(body)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent)
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val channel = NotificationChannel(channelId, getString(R.string.notification_title), NotificationManager.IMPORTANCE_HIGH)
notificationManager.createNotificationChannel(channel)
}
notificationManager.notify(0, notificationBuilder.build())
}
}
当应用程序在后台或被杀死时,NotificationsMessagingService
永远不会被调用。推送器将通知直接发送到通知抽屉。单击它后,将被带到应用程序启动器 activity,在我的例子中恰好是启动画面 activity。
我从初始屏幕 activity 的 onCreate
方法中获取来自 Intent 的额外通知数据并使用它,就像我收到来自 [= 的通知时所做的那样11=]
class SplashActivity : Activity(){
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (intent.extras != null) {
processIntent(intent)
}
}