在一个活动中设置的警报需要显示在另一个活动



我有一个Main活动,它等待来自web服务的随机消息并对其进行处理。流程完成后,它会向用户显示一条消息。用户并不总是在主活动中,因此即使流程在运行,他们也不会收到消息,直到他们返回到主活动。问题是,当用户不在主活动中时,是否可以向他们显示消息?这是我在主要活动中使用的代码:

public void showAuthRequested(String val) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("auth requested");
builder.setMessage("requesting authorization, do you accept?");

builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
authorized = false;
SharedPreferences pref1 = getApplicationContext().getSharedPreferences("Mysets", 0); // 0 - for private mode
SharedPreferences.Editor editor = pref1.edit();
editor.putBoolean("authorized",false);
editor.commit();
webRequests("https://xxx.xxx.xxx.xxx/xxx/xxx/accessResult.php", "true");
}
});
builder.setNegativeButton("Cancel", null);
// create and show the alert dialog
final AlertDialog dialog = builder.create();
runOnUiThread(new Runnable() {
@Override
public void run() {
dialog.show();
}
});

我试着根据Prashant.J的评论添加一个广播接收器

public class AuthReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO: This method is called when the BroadcastReceiver is receiving
// an Intent broadcast.
//throw new UnsupportedOperationException("Not yet implemented");

AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Transfer mission requested");
builder.setMessage("EUD is requesting control, do you accept?");
builder.setNegativeButton("Cancel", null);
builder.setPositiveButton("ok",null);
final AlertDialog dialog = builder.create();
dialog.show();
}

但是我得到了这个错误

E/AndroidRuntime:致命异常:主进程:com.goldlink.nglsv3,PID:14742 java.lang.RuntimeException:无法启动接收器com.goldlink.nglsv3.AuthReceiver:android.view.WindowManager$BadTokenException:无法添加窗口--空令牌无效;你的活动正在进行吗?在android.app.ActivityThread.handleReceiver(ActivityThreads.ja:3614(在android.app.ActivityTthread.access$1300(ActivityTthreads.ja:238(在android.app.activeThread$H.handleMessagecom.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494(上的java.lang.reflect.Method.ioke(Native Method(在com.android.nternal.os.ZygoteInit.main(ZygoteInit.java:965(由以下原因引起:android.view.WindowManager$BadTokenException:无法添加窗口--令牌null无效;你的活动正在进行吗?在android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:381(的android.vview.ViewRootImpl.setView(ViewRootImpl.java:1056(在android.app.Dialog.show(Dialog.java:470(在com.goldlink.ngsv3.AuthReceiver.onReceive(AuthReceiver.java:27(在android.app.ActivityThread.handleReceiver(ActivityThreads.java:3605(android.app.ActivityThread.access$1300(ActivityThred.java:238(在android.ap.ActivityThread$H.handleMessagecom.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494(在com.android.nternal.os.ZygoteInit.main(ZygoteInit.java:965(I/Process:发送信号。PID:14742 SIG:9已断开与目标VM的连接,地址:"localhost:8617",传输:"sock ">

根据我的评论,我正在编写以下步骤。

  1. 使用onReceive((方法编写BroadcastReceiver类
  2. 使用正确的意图筛选器在清单文件中声明BroadcastReceiver
  3. 在您的MainActivity->中,在收到web服务的响应后发送此广播。如果你愿意,你可以把Extra放在任何消息里
  4. 在BroadcastReceive的OnReceive((方法中,使用intent.getAction((检查此intent操作
  5. 从那里打开将显示对话框的活动

通过代码获取更多信息。请参阅下面的链接。在系统重新启动后,在广播接收器中显示警报对话框

最新更新