Android Novice
Android Novice

Reputation: 546

Android Network connection status

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

Upvotes: 1

Views: 909

Answers (1)

Vipul
Vipul

Reputation: 28093

Its because you are trying to pass wrong context

Replace

AlertDialog.Builder builder = new AlertDialog.Builder(this);

by

AlertDialog.Builder builder = new AlertDialog.Builder(context);

And

Replace

Toast.makeText(this, "Internet Connection Required" , Toast.LENGTH_LONG).show();

By

Toast.makeText(context, "Internet Connection Required" , Toast.LENGTH_LONG).show();

Upvotes: 1

Related Questions