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