【问题标题】:Unable to show alert dialog-android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application [duplicate]无法显示警报对话框-android.view.WindowManager$BadTokenException:无法添加窗口——令牌 null 不适用于应用程序 [重复]
【发布时间】:2016-06-02 04:48:57
【问题描述】:

我正在尝试从广播接收器检查互联网连接,如果没有互联网想要显示警报对话框,但在这里我收到了一个由于 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();
        }     
        }
    }
}}

【问题讨论】:

标签: android android-alertdialog android-internet


【解决方案1】:

无法在广播接收器中显示警报对话框。请检查thisthis

【讨论】:

    【解决方案2】:

    试试这个,

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

    并在您的 ma​​infest.xml 中添加系统警报权限:

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

    这可能对你有帮助。

    【讨论】:

      【解决方案3】:

      无法显示警报 dialog-android.view.WindowManager$BadTokenException:无法添加 window — 令牌 null 不适用于应用程序

      由于:

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

      线。因为AlertDialog.Builder 需要可见应用组件的上下文,例如Activity 而不是ServiceBroadcastReceiver 等。

      当前将context 传递给AlertDialog.Builder 这是onReceive 方法的第一个参数,这不是显示UI 元素的有效上下文。

      显示来自BroadcastReceiver的警报:

      1.Theme.Translucent.NoTitleBar 为主题启动一个 Activity 并
      2.onCreate of Activity 中显示 AlertDialog

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-07
        • 1970-01-01
        • 2012-09-12
        • 2011-05-28
        • 2019-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多