- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在显示 Toast 消息时遇到运行时异常
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
当用户从应用中的任何位置收到推送通知时,我想将消息正文显示为 Toast 消息。
有什么帮助吗?
public class MyAppFirebaseMessagingService extends FirebaseMessagingService {
private static final String TAG = "FCM Service";
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
if (remoteMessage.getNotification() != null) {
if (AppConfig.SYSTEM_WIDE_DEBUG) {
Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
}
sendNotification(remoteMessage.getNotification().getBody());
}
}
private void sendNotification(String messageBody) {
Toast.makeText(getApplicationContext(),messageBody,Toast.LENGTH_LONG).show();
Intent intent = new Intent(this, HomeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent, PendingIntent.FLAG_ONE_SHOT);
Uri defaultSoundUri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.pushnotify);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon( R.mipmap.ic_launcher)
.setContentTitle("My APP")
.setContentText(messageBody)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
}
}
最佳答案
如果你想在 UI Thread 上显示 Toast.Run 是最好的方法;
例子:
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(),Toast.LENGTH_SHORT).show();
}
});
另一种方式:
if (Looper.myLooper() == null) {
Looper.prepare();
Toast.makeText(getApplicationContext(), "xxxxxxxxx", Toast.LENGTH_SHORT).show();
Looper.loop();
}
因为源码中Toast使用了Handler,但是当前Thread没有初始化Looper。
关于android - 将 Firebase 通知的 MessageBody 显示为 Toast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41729152/
我想使用 通过 api 在我的应用程序中发送消息 ( https://github.com/devslopes-learn/mac-chat-api ) 当我尝试发送消息时,我总是在 Heroku 终
我已经实现了用户提供反馈的标准方式。当用户点击邮件 View Controller 中的发送或取消时,是否可以通过邮件的消息(或主题)进行搜索。如果邮件包含特定字符串,应用程序应执行操作。在这种情况下
我正在设置一个 SQS 队列,以摄取要由后端容器处理的配置数据 block 。我的第一个想法是 json.dumps 带有配置信息的字典,并通过 sqsclient.send_message() 的
我在显示 Toast 消息时遇到运行时异常 java.lang.RuntimeException: Can't create handler inside thread that has not ca
我跑 ElasticMQ在本地模拟 Amazon SQS,我想将 JSON 文件作为 MessageBody 发送。这是一个有效的示例请求: $ curl 'http://localhost:9324
我正在使用 EWS Managed API 1.2 与 Exchange 2010 和 Outlook 2010/2013 进行集成元素。我们将其与现有系统捆绑在一起。以前,我们可以选择发送 sess
iTunes Connect显示此错误: itc.olympus.partnermessage.lockey.contentprovider.contract.expiresoon.messagebo
我是一名优秀的程序员,十分优秀!