![](/img/trans.png)
[英]WebView - Unable to add window — token null is not for an application
[英]Unable to add window — token null is not for an application inside OnReceive of Broadcast Receiver
I'm trying to implement a scenario, if my application loses internet connectivity I'm posting a alert dialog to the user.
I'm planning to use Broadcast receiver to check internet connectivity in my app by using register and unregister in my main activity.
Here is the code:
**BroadcastReceiver** class : here I'm checking the internet connectivity.
我正在檢查wifi或數據連接服務,如果沒有,我正在提醒用戶。
public class NetworkChangeReceiver extends BroadcastReceiver {
private static final String TAG = "ConnectionReceiver";
private AlertDialog alertDialog;
public NetworkChangeReceiver() {
}
@Override
public void onReceive(final Context context, final Intent intent) {
if (intent.getAction().equals("android.net.conn.CONNECTIVITY_CHANGE")) {
ConnectivityManager cm =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
activeNetwork.isConnectedOrConnecting();
if (isConnected) {
try {
if (alertDialog != null && alertDialog.isShowing())
alertDialog.dismiss();
} catch (Exception e) {
e.printStackTrace();
}
} else {
if (alertDialog == null || !alertDialog.isShowing()) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("No internet connection");
builder.setMessage("check your connection.");
builder.setPositiveButton(context.getString(R.string.confirm_button_text), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
alertDialog = builder.create();
alertDialog.show();
}
}
}
}
}
**And in my Activity I'm registering the broadcast receiver.** :
public class MyActivity extends Activity {
private NetworkChangeReceiver networkChangeReceiver = new NetworkChangeReceiver();
@Override
protected void onResume() {
super.onResume();
registerReceiver(networkChangeReceiver, new IntentFilter(
"android.net.conn.CONNECTIVITY_CHANGE"));
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(networkChangeReceiver);
}
}
When I put my phone in airplane mode , alert dialog pops up and after 2 seconds my app gives an "Unable to add window -- token null is not for an application " exception. and this exception occurs 2 times.
**here is my log**:
AndroidRuntime: FATAL EXCEPTION: main Process: , PID: 9923 java.lang.RuntimeException: Unable to start receiver xxxx.NetworkChangeReceiver: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
My **Manifest** file:
<application
android:name="xxxxx"
android:allowBackup="true"
tools:replace = "android:icon"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<receiver android:name=".xxx.NetworkChangeReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
</intent-filter>
</receiver>
<activity
android:name="xxxx"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
有人可以幫我解決如何解決異常,為什么異常發生兩次?
從manifest.xml中刪除我的接收器解決了我的問題。 謝謝。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.