I'm trying build this network connection using BroadcastReceiver. When connection doesnt exist it will show an alert dialog box telling users to retry the connection. I couldnt get this part to work. It says "The constructor AlertDialog.Builder(ConnectionDetector) is undefined" and "The method makeText(Context, CharSequence, int) in the type Toast is not applicable for the arguments (ConnectionDetector, String, int)" . I think i messed up with my codes. Last question is how to do a retry button? Pretty new to Android here. Thanks
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.widget.Toast;
/**
* This broadcast receiver is awoken after boot and registers the service that
* checks for new photos from all the known contacts.
*/
public class ConnectionDetector extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent) {
boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY,false);
if(noConnectivity){
Toast.makeText(context, "Internet Connection Required" , Toast.LENGTH_LONG).show();
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setCancelable(true);
// builder.setIcon(R.drawable.dialog_question);
builder.setTitle("Title");
builder.setInverseBackgroundForced(true);
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog alert = builder.create();
alert.show();
//System.exit(0);
//Show Warning Message
//Close Application the way i suggested
}
}
}
Logcat : App Crashed
08-22 13:56:31.899: E/AndroidRuntime(29026): FATAL EXCEPTION: main
08-22 13:56:31.899: E/AndroidRuntime(29026): java.lang.RuntimeException: Unable to start receiver com.example.androidhive.ConnectionDetector: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
08-22 13:56:31.899: E/AndroidRuntime(29026): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2140)
08-22 13:56:31.899: E/AndroidRuntime(29026): at android.app.ActivityThread.access$1500(ActivityThread.java:127)
08-22 13:56:31.899: E/AndroidRuntime(29026): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1211)
08-22 13:56:31.899: E/AndroidRuntime(29026): at android.os.Handler.dispatchMessage(Handler.java:99)
08-22 13:56:31.899: E/AndroidRuntime(29026): at android.os.Looper.loop(Looper.java:137)
08-22 13:56:31.899: E/AndroidRuntime(29026): at android.app.ActivityThread.main(ActivityThread.java:4512)
08-22 13:56:31.899: E/AndroidRuntime(29026): at java.lang.reflect.Method.invokeNative(Native Method)
08-22 13:56:31.899: E/AndroidRuntime(29026): at java.lang.reflect.Method.invoke(Method.java:511)
08-22 13:56:31.899: E/AndroidRuntime(29026): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:982)
08-22 13:56:31.899: E/AndroidRuntime(29026): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749)
08-22 13:56:31.899: E/AndroidRuntime(29026): at dalvik.system.NativeStart.main(Native Method)
08-22 13:56:31.899: E/AndroidRuntime(29026): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
08-22 13:56:31.899: E/AndroidRuntime(29026): at android.view.ViewRootImpl.setView(ViewRootImpl.java:693)
08-22 13:56:31.899: E/AndroidRuntime(29026): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:301)
08-22 13:56:31.899: E/AndroidRuntime(29026): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:215)
08-22 13:56:31.899: E/AndroidRuntime(29026): at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:140)
08-22 13:56:31.899: E/AndroidRuntime(29026): at android.app.Dialog.show(Dialog.java:278)
08-22 13:56:31.899: E/AndroidRuntime(29026): at com.example.androidhive.ConnectionDetector.onReceive(ConnectionDetector.java:52)
08-22 13:56:31.899: E/AndroidRuntime(29026): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2133)
08-22 13:56:31.899: E/AndroidRuntime(29026): ... 10 more
Its because you are trying to pass wrong context
Replace
by
And
Replace
By