Оповещение, настроенное в одном действии, должно отображаться в другом - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть основное занятие, которое ждет случайных сообщений от веб-службы и обрабатывает их. После завершения процесса он показывает пользователю сообщение. Пользователь не всегда находится в основном действии, поэтому он не получает сообщение, даже если процесс выполняется, пока не вернется к основному действию. Вопрос в том, могут ли пользователи показывать сообщения, пока они не находятся в основной деятельности? Этот код, который я использую в основном упражнении:

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();
        }
    });

Я пытался добавить приемник Broadcast в соответствии с комментарием 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 : Невозможно добавить окно - токен null недействителен; ваша деятельность работает? в android .app.ActivityThread.handleReceiver (ActivityThread. java: 3614) в android .app.ActivityThread.access $ 1300 (ActivityThread. java: 238) в android .app.ActivityThread $ H. handleMessage (ActivityThread. java: 1798) в android .os.Handler.dispatchMessage (Handler. java: 106) в android .os.Looper.l oop (Looper. java: 214 ) в android .app.ActivityThread.main (ActivityThread. java: 7073) в java .lang.reflect.Method.invoke (собственный метод) в com. android .internal.os.RuntimeInit $ MethodAndArgsCaller .run (RuntimeInit. java: 494) в com. android .internal.os.ZygoteInit.main (ZygoteInit. java: 965) Причина: android .view.WindowManager $ BadTokenException: Невозможно добавить window - токен null недействителен; ваша деятельность работает? в android .view.ViewRootImpl.setView (ViewRootImpl. java: 1056) в android .view.WindowManagerGlobal.addView (WindowManagerGlobal. java: 381) в android .view.WindowManagerImpl.addIIllImpl (WindowMan . java: 93) на android .app.Dialog.show (Диалог. java: 470) на com.goldlink.nglsv3.AuthReceiver.onReceive (AuthReceiver. java: 27) на android. app.ActivityThread.handleReceiver (ActivityThread. java: 3605) по android .app.ActivityThread.access $ 1300 (ActivityThread. java: 238) по android .app.ActivityThread $ H.handleMessage (ActivityThread. java: 1798) в android .os.Handler.dispatchMessage (Обработчик. java: 106) в android .os.Looper.l oop (Looper. java: 214) в android .app.ActivityThread.main (ActivityThread. java: 7073) в java .lang.reflect.Method.invoke (собственный метод) в com. android .internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit. java: 494) по тел. android .internal.os.ZygoteInit.main (ZygoteInit. java: 965) I / Процесс: отправка сигнала. PID: 14742 SIG: 9 Отключен от целевой виртуальной машины, адрес: 'localhost: 8617', транспорт: 'sock

1 Ответ

0 голосов
/ 12 апреля 2020

В соответствии с моим комментарием я пишу шаги ниже.

  1. Напишите класс BroadcastReceiver с методом onReceive ().
  2. Объявите BroadcastReceiver внутри файла манифеста с правильным фильтром намерений
  3. В вашем MainActivity-> после того, как вы получите ответ от веб-сервиса, отправьте эту трансляцию. Вы можете поместить любое сообщение, если хотите.
  4. В методе OnReceive () проверки BroadcastReceive для этого намеренного действия используется intent.getAction ()
  5. Оттуда откройте действие, которое покажет диалоговое окно.

для получения дополнительной информации по коду. см. ссылку ниже показать диалоговое окно с предупреждением в приемнике вещания после перезагрузки системы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...