【问题标题】:How to write Android code for internet connection?如何编写用于互联网连接的 Android 代码?
【发布时间】:2016-09-01 09:50:32
【问题描述】:

如何构建具有互联网连接的应用程序?

如果没有互联网,它必须显示一个警告框

MainActivity.java

     public class MainActivity extends AppCompatActivity {
    ConnectivityManager connectivityManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        String macadd = wifiManager.getConnectionInfo().getMacAddress();
        BluetoothAdapter BA = BluetoothAdapter.getDefaultAdapter();
        if (!BA.isEnabled()) {
            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
            builder.setTitle("PLEASE READ THE FOLLOWING");
            builder.setMessage("Please On Your Bluetooth");
            builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    finish();

                }
            });
            AlertDialog alertDialog = builder.create();
            alertDialog.setCancelable(false);
            alertDialog.show();
        }
 }

【问题讨论】:

    标签: android android-intent bluetooth android-wifi


    【解决方案1】:

    ManifestPermssions:

    <uses-permission android:name="android.permission.INTERNET" />

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    检查面向 android 6.0 及更高版本的 android 的运行时权限。

    public class MainActivity extends AppCompatActivity {
        Context context;
        private static final int REQUEST_RUNTIME_PERMISSION = 123;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            context = this;
    
            if (CheckPermission(MainActivity.this, Manifest.permission.ACCESS_NETWORK_STATE)) {
                // you have permission go ahead
                checkIntetnetConnection();
            } else {
                // you do not have permission go request runtime permissions
                RequestPermission(MainActivity.this, Manifest.permission.ACCESS_NETWORK_STATE, REQUEST_RUNTIME_PERMISSION);
            }
    
        }
    
        private void checkIntetnetConnection() {
            if (isNetworkAvailable()) {
            } else {
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setTitle("PLEASE READ THE FOLLOWING");
                builder.setMessage("Please On Your Bluetooth");
                builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        finish();
    
                    }
                });
                AlertDialog alertDialog = builder.create();
                alertDialog.setCancelable(false);
                alertDialog.show();
            }
        }
    
        private boolean isNetworkAvailable() {
            ConnectivityManager connectivityManager
                    = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
            return activeNetworkInfo != null && activeNetworkInfo.isConnected();
        }
    
        @Override
        public void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults) {
            switch (permsRequestCode) {
    
                case REQUEST_RUNTIME_PERMISSION: {
                    if (grantResults.length > 0
                            && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                        // you have permission go ahead
                        checkIntetnetConnection();
                    } else {
                        // you do not have permission show toast.
                    }
                    return;
                }
            }
        }
    
        public void RequestPermission(Activity thisActivity, String Permission, int Code) {
            if (ContextCompat.checkSelfPermission(thisActivity,
                    Permission)
                    != PackageManager.PERMISSION_GRANTED) {
                if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
                        Permission)) {
                } else {
                    ActivityCompat.requestPermissions(thisActivity,
                            new String[]{Permission},
                            Code);
                }
            }
        }
    
        public boolean CheckPermission(Context context, String Permission) {
            if (ContextCompat.checkSelfPermission(context,
                    Permission) == PackageManager.PERMISSION_GRANTED) {
                return true;
            } else {
                return false;
            }
        }
    }
    

    【讨论】:

    • 如果我使用它,我的 logcat java.lang.RuntimeException 中出现此错误:无法启动活动 ComponentInfo{com.example.admin.basicproject/com.example.admin.basicproject.MainActivity} :java.lang.SecurityException:WifiService:用户10180和当前进程都没有android.permission.ACCESS_WIFI_STATE。在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2493)
    • 你有没有添加这个权限<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    • 在此处粘贴您的日志错误以及您的 android OS 版本是什么?
    • 我目前的安卓5.0版本
    【解决方案2】:

    创建一个类NetworkInformation.java

        import android.content.Context;
        import android.net.ConnectivityManager;
        import android.net.NetworkInfo;
    
        public class NetworkInformation {
    
             private static NetworkInfo networkInfo;
    
             public static boolean isConnected(Context context) {
    
                     ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
    
                     try{
                        networkInfo = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
    
                    // test for connection for WIFI
                    if (networkInfo != null
                            && networkInfo.isAvailable()
                            && networkInfo.isConnected()) {
                        return true;
                    }
    
                    networkInfo = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
                    // test for connection for Mobile
                    if (networkInfo != null
                            && networkInfo.isAvailable()
                            && networkInfo.isConnected()) {
                        return true;
                    }
    
                    return false;
              }   
    
        }
    

    现在在调用网络相关任务(asynctask)之前检查网络是否可用,如下所示:

    if(NetworkInformation.isConnected(YourClassName.this))
            {
                 new FetchWebsiteData().execute();        
            }else{
    
            Toast.makeText(NewsAndEvents.this,R.string.no_connection,Toast.LENGTH_LONG).show();
            }
    

    不要忘记在 AndroidManifest.xml 中包含以下权限:

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    

    【讨论】:

      【解决方案3】:
        public class InternetConnectionBroadcast extends BroadcastReceiver {
      
          @Override
          public void onReceive(Context context, Intent intent) {
      
      
              //Do your operation you will get here on connectivity change
      
              if (isOnline()) {
      
              //show dialog
      
              } else {
      
             //dismiss dialog
      
              }
      
          }
      
      }
      
      
      
      public boolean isOnline() {
      try {
          connectivityManager = (ConnectivityManager) context
                  .getSystemService(Context.CONNECTIVITY_SERVICE);
      
          NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
          connected = networkInfo != null && networkInfo.isAvailable() &&
                  networkInfo.isConnected();
          return connected;
      
      
      } catch (Exception e) {
          System.out.println("CheckConnectivity Exception: " + e.getMessage());
          Log.v("connectivity", e.toString());
      }
      return connected;
      

      }

      在您的活动中注册此接收器:

      registerReceiver(internetConnectionBroadcast, new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"));
      

      【讨论】:

        【解决方案4】:

        以下是在android app中检查网络连接的方法

        public static Boolean checkNetworkConnection(Context context) {
            ConnectivityManager connectivityManager;
            try {
                connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
                if (activeNetwork != null) { // connected to the internet
                    return true;
                }
            } catch (Exception exception) {
                Log.d(TAG, "CheckConnectivity Exception: " + exception.getMessage());
            }
            return false;
        }
        

        【讨论】:

          【解决方案5】:

          创建新的 java 类....

           import android.content.Context;
           import android.net.ConnectivityManager;
           import android.net.NetworkInfo;
           import android.util.Log;
           import android.widget.Toast;
          
           public class Connectionstatus {
             private static Connectionstatus instance = new Connectionstatus();
             static Context context;
             ConnectivityManager connectivityManager;
             NetworkInfo wifiInfo, mobileInfo;
             boolean connected = false;
          
             public static Connectionstatus getInstance(Context ctx) {
                context = ctx.getApplicationContext();
                return instance;
           }
          
          public boolean isOnline() {
              try {
                  connectivityManager = (ConnectivityManager) context
                          .getSystemService(Context.CONNECTIVITY_SERVICE);
          
                  NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
                  connected = networkInfo != null && networkInfo.isAvailable() &&
                          networkInfo.isConnected();
                  return connected;
          
          
              } catch (Exception e) {
                  System.out.println("CheckConnectivity Exception: " + e.getMessage());
                  Log.v("connectivity", e.toString());
              }
              return connected;
           }
          

          }

          在您的活动中...

          if (Connectionstatus.getInstance(this).isOnline())
              {
                  Toast.makeText(this,"Your Internet Connection is Working...",Toast.LENGTH_LONG).show();
          else
              {
                  Toast.makeText(this,"Your Internet Connection is not working,\nPlease Check Internet Connection...!!!",Toast.LENGTH_LONG).show();
              }
          

          清单文件:

            <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
            <uses-permission android:name="android.permission.INTERNET" />
          

          【讨论】:

            猜你喜欢
            • 2011-07-18
            • 1970-01-01
            • 2015-03-31
            • 2013-02-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多