簡體   English   中英

Android網絡連接狀態

[英]Android Network connection status

我正在嘗試使用BroadcastReceiver建立此網絡連接。 如果不存在連接,它將顯示一個警告對話框,告訴用戶重試連接。 我無法讓這部分工作。 它說“ The constructor AlertDialog.Builder(ConnectionDetector) is undefined ”和“ The method makeText(Context, CharSequence, int) in the type Toast is not applicable for the arguments (ConnectionDetector, String, int) ”。 我想我弄亂了我的代碼。 最后一個問題是如何做一個重試按鈕? 這里是Android的新手。 謝謝

   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:應用程序崩潰

 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

這是因為您嘗試傳遞錯誤的上下文

更換

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

通過

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

更換

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

通過

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM