无法显示警报对话框android.view.WindowManager$BadTokenException:无法添加窗口--标记null不适用于应用程序
我正在尝试从广播接收器检查internet连接,如果没有internet连接,我想显示一个警报对话框,但在这里我收到一个由于无法显示警报对话框android.view.WindowManager$BadTokenException:无法添加窗口--标记null不适用于应用程序,android,android-alertdialog,android-internet,Android,Android Alertdialog,Android Internet,我正在尝试从广播接收器检查internet连接,如果没有internet连接,我想显示一个警报对话框,但在这里我收到一个由于AlertDialog.Builder(context)而提到的错误。但如果我将其更改为AlertDialog.Builder(this)或AlertDialog.Builder(NetworkChangeReceiver.this),则会出现编译错误。构造函数AlertDialog.Builder(NetworkChangeReceiver)未定义 NetworkChan
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();
}
}
}
}}
试试这个
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" />
这可能对你有帮助
无法显示警报
对话框android.view.WindowManager$BadTokenException:无法添加
窗口标记null不适用于应用程序
由于:
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
线路。因为AlertDialog.Builder
需要可见应用程序组件的上下文,如活动
,而不是服务
,广播接收器
等
当前将context
传递到AlertDialog.Builder
是onReceive
方法的第一个参数,它不是显示UI元素的有效上下文
要显示来自广播接收器的警报
:
1.以主题、半透明、NoTitleBar
主题和2.在
活动的创建时显示警报对话框
无法在广播接收器中显示警报对话框。请查收