gpt4 book ai didi

android - GCM IntentService 如何在收到通知时显示弹出窗口

转载 作者:行者123 更新时间:2023-11-29 00:16:54 25 4
gpt4 key购买 nike

如果我的应用程序处于 Activity 状态,我想在收到 GCM 时在我当前的 Activity 上显示一个弹出窗口。

我想在 GcmIntentService 中访问我当前的 Activity ,但我认为这不可能或不是继续进行的好方法...

谁能帮帮我?

解决方案

在我的 GcmIntentService.java 中:

@Override
protected void onHandleIntent(Intent intent) {
...
Intent broadCastIntent = new Intent("client_notifications_broadcast");
broadCastIntent.putExtra("data", extras.getString("other"));
LocalBroadcastManager.getInstance(this).sendBroadcast(broadCastIntent);
...
}

在我想要弹出窗口的所有 Activity 扩展的 MainActivity 中,我添加了一个具有自定义布局的对话框:

@Override
protected void onCreate(Bundle savedInstanceState) {
...
mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String dataString = intent.getStringExtra("data");

final Dialog dialog = new Dialog(ClientMainActivity.this);
dialog.setContentView(R.layout.custom_dialog_popup);
dialog.setTitle("Title...");

// set the custom dialog components - text, image and button
TextView text = (TextView) dialog.findViewById(R.id.text);
text.setText("Android custom dialog example!");
ImageView image = (ImageView) dialog.findViewById(R.id.image);
image.setImageResource(R.drawable.ic_launcher);

TextView dialogButton = (TextView) dialog.findViewById(R.id.dialogButtonOK);
// if button is clicked, close the custom dialog
dialogButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();

Log.d("receiver", "Got message: " + dataString);
}
};

LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter("client_notifications_broadcast"));
}

最佳答案

好吧,你可以使用LocalBroadcast。参见 LocalBroadcast Manager .关于如何实现,how to use LocalBroadcastManager? 上有一个很好的例子.

LocalBroadcast Manager is a helper to register for and send broadcasts of Intents to local objects within your process. The data you are broadcasting won't leave your app, so don't need to worry about leaking private data.`

您的 Activity 注册了这个本地广播。从服务中,您从 onMessage 中发送一个 LocalBroadcast(说嘿,我收到一条消息。显示它 Activity )。然后在您的 Activity 中,您可以收听广播。这样,如果 Activity 处于最前沿/处于 Activity 状态,它将接收广播,否则不会。因此,每当您收到该本地广播时,如果 Activity 处于打开状态,您就可以执行所需的操作。

如果你想为整个应用程序做,那么你可以让你所有的 Activity 扩展一个抽象 Activity 。在这个抽象 Activity 类中,您可以为这个“LocalBroadcast”注册它。另一种方法是在您的所有 Activity 中注册 LocalBroadcast(但是您必须管理如何只显示一次消息)。

希望对你有帮助。

关于android - GCM IntentService 如何在收到通知时显示弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25921960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com