- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试在 onMessageReceived 中使用 AlertDialog,但出现此错误。
05-04 11:27:40.038 30721-31424/com.xxx.xxx E/AndroidRuntime: FATAL EXCEPTION: pool-4-thread-1
Process: com.xxx.xxx, PID: 30721
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:200)
at android.os.Handler.<init>(Handler.java:114)
at android.app.Dialog.<init>(Dialog.java:108)
at android.app.AlertDialog.<init>(AlertDialog.java:125)
at android.app.AlertDialog$Builder.create(AlertDialog.java:967)
at android.app.AlertDialog$Builder.show(AlertDialog.java:986)
at com.xxx.xxx.util.FirebaseMessagingService.optionalAlert(FirebaseMessagingService.java:78)
at com.xxx.xxx.util.FirebaseMessagingService.onMessageReceived(FirebaseMessagingService.java:38)
at com.google.firebase.messaging.FirebaseMessagingService.zzl(Unknown Source)
at com.google.firebase.messaging.FirebaseMessagingService.zzJ(Unknown Source)
at com.google.firebase.messaging.FirebaseMessagingService.handleIntent(Unknown Source)
at com.google.firebase.iid.zzb$1.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
这是我的代码:
public class FirebaseMessagingService extends com.google.firebase.messaging.FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
String msg=remoteMessage.getNotification().getBody();
Map<String, String> params = remoteMessage.getData();
String Valuekey = remoteMessage.getData().get("key");
if (Valuekey.equals("true")) {
optionalAlert();
}else {
Util.Alert(this,getString(R.string.ConsignmentNoFound));
}
// Util.Alert(getBaseContext(),msg);
}
private void optionalAlert () {
AlertDialog.Builder adb = new AlertDialog.Builder(this);
TextView textView = new TextView(this);
textView.setText(getString(R.string.ConsignmentFound));
textView.setTextSize(24);
adb.setCustomTitle(textView);
//adb.setTitle(getString(R.string.ConsignmentFound));
adb.setIcon(android.R.drawable.ic_dialog_alert);
adb.setPositiveButton("Si", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent nextActivity = new Intent(FirebaseMessagingService.this, MainActivity.class);
nextActivity.putExtra("act", "PinValidate");
startActivity(nextActivity);
} });
adb.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
} });
adb.show();
}
}
最佳答案
这肯定有效
package pkg.name
import pkg.name.DisplayAlert
import android.content.Intent
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage
class CloudMsg: FirebaseMessagingService() {
override fun onNewToken(token: String) {}
override fun onMessageReceived(remoteMessage: RemoteMessage) {
val mDisplayAlert = Intent(this, DisplayAlert::class.java)
mDisplayAlert.flags = Intent.FLAG_ACTIVITY_NEW_TASK
mDisplayAlert.putExtra("title", remoteMessage.notification?.title)
mDisplayAlert.putExtra("body", remoteMessage.notification?.body)
startActivity(mDisplayAlert)
}
override fun onCreate() {}
}
package pkg.name
import android.os.Bundle
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
class DisplayAlert : AppCompatActivity() {
internal var title: String? = null
internal var body: String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
b = intent.extras
if (b != null) {
title = b!!.getString("title")
body = b!!.getString("body")
val builder: AlertDialog.Builder = AlertDialog.Builder(this)
builder.setTitle(title)
builder.setIcon(R.drawable.store)
builder.setMessage(body)
.setCancelable(false)
.setPositiveButton("Yes") { dialog, id ->
finish()
}
val alertDialog = builder.create()
alertDialog.show()
}
}
companion object {
var b: Bundle? = null
}
}
<service
android:name=".CloudMsg"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<activity
android:name=".DisplayAlert"
android:label="@string/app_name"
android:theme="@style/Total_Translucent">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<style name="Total_Translucent" parent="Theme.AppCompat.DayNight.NoActionBar">
<item name="android:windowBackground">@color/transparent</item>
<item name="android:windowIsTranslucent">true</item>
<item name="colorPrimaryDark">@color/transparent</item>
</style>
<color name="transparent">@android:color/transparent</color>
关于android - 我不能在 onMessageReceived 中使用 AlertDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43788352/
我创建了一个应用程序,当收到来自 FCM 的消息时,该应用程序会启动警报。该应用程序在前台、后台或 Activity 关闭时都可以正常工作。 但是当手机长时间处于 sleep 模式时(不知 Prop
这是我设置工具栏 (MainActivity) 的方法。 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuIn
我正在关注 this在我的 Android 设备上接收推送通知的教程。 我可以从 Firebase 控制台发送推送通知 - 我也可以在 logcat 中看到 Firebase 事件,但我的 onMes
首先,这不是因为应用程序在后台。 通知与数据消息负载一起发送。在 Play 控制台中,它表示消息已“已确认”,因此它们正在到达设备。对于大多数用户,onMessageReceived 方法被调用,但对
我正在使用以下代码接收通过 firebase 控制台发送的 fcm 消息,但从未调用此函数。相反,当应用程序处于后台时,我能够在我的启动器类中接收消息,但是当应用程序处于前台时,我无法获取它。 pub
这个问题在这里已经有了答案: Does FirebaseMessagingService run in the background by default? (2 个答案) 关闭 4 年前。 Fir
我正在使用适用于 Android 的 Firebase 云消息传递。当我的应用程序位于前台时,FCM 将在我的应用程序的 FirebaseMessagingService 子类上调用 onMessag
我实现了Huawei Push Kit。 onNewToken 在应用启动后调用。我想使用 onMessageReceived。 当我向客户端发送推送通知时,推送通知会出现在 android 上,但不
我使用 WSO2 作为我的身份提供者 (IDP)。它将 JWT 放在名为“X-JWT-Assertion”的 header 中。 为了将它输入 ASP.NET Core 系统,我添加了一个 OnMes
我刚刚开始使用 Firebase Cloud Messaging,并在 Manifest 中设置了所有依赖项、Firebase 服务及其服务标签。 从控制台发送消息时,会检测到目标用户,但应用程序不会
我正在尝试“捕获”发送到应用程序的 firebase 云消息,当我收到(/单击)一条消息时,我想根据在 firebase 控制台中添加的“自定义数据”键/值执行一些操作。 我的代码现在是这样的: My
我正在尝试实现 GCM。一切正常,除了 onMessageReceived() 方法仅在应用程序运行时被调用。 我搜索了解决方案,但找不到与我相匹配的案例。我的 GCM 请求正文仅包含“to”和“da
我有以下 list - 并遵循 on
我正在尝试从服务器向我的应用程序获取消息。我有这个服务器 url,它向所有用户发送消息: https://taub-prayer-ramym.c9.io/send?message=123 我的应用程序
实际上我需要在应用程序图标中显示徽章,但我不知道如何获取徽章以及为什么当应用程序处于后台或应用程序未运行时 onMessageReceived 不调用。 public class Custom_Fir
我已经清楚地阅读了很多关于 firebase 推送通知行为的文档。当我的应用程序处于后台时,我可以在系统托盘上看到通知,但当应用程序处于前台时,我不会触发 onMessageReceived 回调。我
当应用程序通过点击通知处于前台或后台时,应用程序调用 onMessageReceived 事件。我使用 click_action 通知。对吗? 我在应用程序位于前台时创建一个通知,当我点击该通知时它会
我正在尝试在收到 fcm 消息且 APP 处于后台时显示通知。我尝试了不同风格的通知,但没有运气。通知不会显示 这是代码 public void onMessageReceived(RemoteMes
我正在制作必须显示推送通知的应用程序。我可以正确注册 token 并在 FirebaseMessageService remoteMessage 中获取数据。但它没有显示通知。我想检查类型。如果 ty
正如您在标题中所写,当应用程序关闭时它运行良好并且 onMessageReceived 获取消息正文和标题但是如果应用程序处于前台模式(运行模式)则通知可以发送但没有消息和标题! 请问怎么办? 代码:
我是一名优秀的程序员,十分优秀!