Невозможно отобразить диалоговое окно предупреждения-android.view.WindowManager $BadTokenException: невозможно добавить нулевой токен окна не для приложения

Я пытаюсь проверить подключение к Интернету из широковещательного приемника, и если нет Интернета, я хочу показать диалоговое окно с предупреждением, но здесь я получаю сообщение об ошибке, упомянутое выше из-за AlertDialog.Builder(context) . Но если я изменю его на AlertDialog.Builder(this) или AlertDialog.Builder(NetworkChangeReceiver.this), я получу ошибку компиляции. Конструктор AlertDialog.Builder(NetworkChangeReceiver) не определен

NetworkChangeReceiver.java

package com.example;


public class NetworkChangeReceiver extends BroadcastReceiver {

@SuppressWarnings("deprecation")
@Override
public void onReceive(final Context context, final Intent intent) {
    Log.d("Inside Network change receiver", Background.isActivityVisible()+"------------------------");
    if(Background.isActivityVisible()==true){
        Boolean status = NetworkUtil.getConnectivityStatusString(context);
        Log.d("NetworkChangeReceiver", status+"");
        if(status){
            Log.d("NetworkChangeReceiver", "User Comes online");
        }
        else{
            Intent i = new Intent(context, Offline.class);
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(i);
            try{
            final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);

            // set title
            alertDialogBuilder.setTitle("Lost Internet Connectivity");

            // set dialog message
            alertDialogBuilder
            .setMessage("Do you want to retry!")
            .setCancelable(false)
            .setPositiveButton("Yes",new DialogInterface.OnClickListener()
            {
                public void onClick(DialogInterface dialog,int id) {
                    // if this button is clicked, close
                    // current activity
                    Boolean status = NetworkUtil.getConnectivityStatusString(context);  
                    if(status){
                        Intent i = new Intent(context, MainActivity.class);
                        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        context.startActivity(i);
                    }

                    else{
                        // create alert dialog
                        AlertDialog alertDialog = alertDialogBuilder.create();

                        // show it
                        alertDialog.show();
                    }

                }
            })
            .setNegativeButton("No",new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog,int id) {
                    Intent intent = new Intent(Intent.ACTION_MAIN);
                    intent.addCategory(Intent.CATEGORY_HOME);
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                  context.  startActivity(intent);
                }
            });

            // create alert dialog
            AlertDialog alertDialog = alertDialogBuilder.create();

            // show it
            alertDialog.show();
        }   catch(Exception e){
            e.printStackTrace();
        }     
        }
    }
}}

person SwagDevelopers    schedule 02.06.2016    source источник
comment
stackoverflow.com/questions/8766739/   -  person USKMobility    schedule 02.06.2016


Ответы (3)


Невозможно отобразить диалоговое окно предупреждения в широковещательном приемнике. Пожалуйста, проверьте это и это.

person SripadRaj    schedule 02.06.2016

Попробуй это,

YourAlertDialog dialog = new YourAlertDialog(mContext);
dialog.getWindow()
    .setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
dialog.show();

И добавьте разрешение системных предупреждений в файл mainfest.xml:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />

это может вам помочь.

person Sathish Kumar J    schedule 02.06.2016

Невозможно отобразить диалоговое окно предупреждения-android.view.WindowManager$BadTokenException: невозможно добавить окно — токен null не для приложения

Из-за :

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);

линия. потому что AlertDialog.Builder требуется контекст видимого компонента приложения, такого как Activity вместо Service, BroadcastReceiver и т. д.

В настоящее время передача context в AlertDialog.Builder, который является первым параметром метода onReceive, не является допустимым контекстом для отображения элементов пользовательского интерфейса.

Чтобы показать оповещение от BroadcastReceiver:

1. начать действие с темой Theme.Translucent.NoTitleBar и
2. показать AlertDialog в onCreate из Activity

person ρяσѕρєя K    schedule 02.06.2016