Android 显示改装和x27中的对话框;拦截器

Android 显示改装和x27中的对话框;拦截器,android,dialog,retrofit,interceptor,Android,Dialog,Retrofit,Interceptor,我试图在几个参数不满足时显示改装拦截器的对话框。 但是我得到了android.view.WindowManager$BadTokenException:无法添加窗口--标记null无效;您的活动正在运行吗?尝试显示对话框时出现异常 这是我的密码 final AlertDialog.Builder alertDialog = new AlertDialog.Builder(ShieldSquare.applicationContext) .setIcon(android.R

我试图在几个参数不满足时显示改装拦截器的对话框。 但是我得到了
android.view.WindowManager$BadTokenException:无法添加窗口--标记null无效;您的活动正在运行吗?
尝试显示对话框时出现异常

这是我的密码

final AlertDialog.Builder alertDialog = new AlertDialog.Builder(ShieldSquare.applicationContext)
            .setIcon(android.R.drawable.ic_dialog_alert)
            .setTitle("Are you sure to Exit")
            .setMessage("Exiting will call finish() method")
            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    dialogInterface.dismiss();
                }
            })
            //set negative button
            .setNegativeButton("No", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    //set what should happen when negative button is clicked
                    Toast.makeText(ShieldSquare.applicationContext,
                            "Nothing Happened", Toast.LENGTH_LONG).show();
                }
            });

    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            alertDialog.create().show();
        }
    };

    new Handler(Looper.getMainLooper()).post(runnable);
上述代码在拦截器上运行,然后再进行改造链


ssResponse=chain.procedue(原始请求)

通常,我们只显示活动中的对话框,因此上下文
ShieldSquare.applicationContext
无法显示
AlertDialog

有两种方法可以满足您的需求:

第一个,使用特殊权限
android.permission.SYSTEM\u ALERT\u窗口
。 在
alertDialog.show()之前,添加:

alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
并将下面的权限添加到
AndroidManifest.xml

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

我发现了一些使用
BroadcastReceiver
来显示对话框的方法,您也可以看看,看看和这个。

警报对话框不显示在改装拦截器中。它只显示活动或片段。当您调用api时,显示警报对话框。@AndroidTeam谢谢。我正在为android开发一个SDK,它将检测应用程序的误用并停止api调用,然后显示一个对话框。在拦截器改造的背景下,如何实现这样的事情?谢谢洪端。我会尝试你的建议,然后回来。
public abstract class BaseActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ShieldSquare.applicationContext = this;
    }
}