繁体   English   中英

打开互联网连接时打开Android应用程序,否则显示没有互联网连接消息

[英]open Android app when internet connection is on otherwise display no internet connection message

我刚创建了一个用于从网站获取数据的Android应用程序。 我想检查设备是否有互联网连接。 如果设备具有互联网连接,请运行我的代码并获取数据并显示它,否则如果设备没有互联网,则显示无互联网连接消息。 我试过这段代码来检查互联网连接。 如果有互联网连接,我该如何调用代码?

我的Java代码:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_primary);
        new FetchWebsiteData().execute();        
            }
        });

    }

    private class FetchWebsiteData extends AsyncTask<Void, Void, String[]> {
        String websiteTitle, websiteDescription,websiteDescription1,websiteDescription2,websiteDescription3,listValue,listValue1;
        ProgressDialog progress;
        private Context context;

        //check Internet connection.
        private void checkInternetConnection(){

            ConnectivityManager check = (ConnectivityManager) this.context.
                    getSystemService(Context.CONNECTIVITY_SERVICE);
            if (check != null)
            {
                NetworkInfo[] info = check.getAllNetworkInfo();
                if (info != null)
                    for (int i = 0; i <info.length; i++)
                        if (info[i].getState() == NetworkInfo.State.CONNECTED)
                        {
                            Toast.makeText(context, "Internet is connected",
                                    Toast.LENGTH_SHORT).show();

                        }

            }
            else{
                Toast.makeText(context, "not conencted to internet",
                        Toast.LENGTH_SHORT).show();
            }
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

            //some code here
        }

        @Override
        protected String[] doInBackground(Void... params) {
            ArrayList<String> hrefs=new ArrayList<String>();
            try {

                }

            } catch (IOException e) {
                e.printStackTrace();
            }
            //get the array list values
            for(String s:hrefs)
            {
                //some code
            }
            //parsing first URL
            String [] resultArray=null;
            try {


            } catch (IOException e) {
                e.printStackTrace();
            }
            //parsing second URL
            String [] resultArray1=null;
            try {



            } catch (IOException e) {
                e.printStackTrace();
            }

            try{


            } catch (Exception e) {
                e.printStackTrace();
            }


            return null;
        }



        @Override
        protected void onPostExecute(String[] result) {

            ListView list=(ListView)findViewById(R.id.listShow);
            ArrayAdapter<String> arrayAdapter=new ArrayAdapter<String>(getBaseContext(),android.R.layout.simple_list_item_1,result);
            list.setAdapter(arrayAdapter);
            mProgressDialog.dismiss();
        }
    }
}

如何在连接打开时运行代码以及如何在应用程序没有Internet连接时显示消息?

试试这个

//check internet connection
public static boolean isNetworkStatusAvialable (Context context) {
    ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (connectivityManager != null)
    {
        NetworkInfo netInfos = connectivityManager.getActiveNetworkInfo();
        if(netInfos != null)
        {
            return netInfos.isConnected();
        }
    }
    return false;
}

一旦该方法返回您必须检查的值

//detect internet and show the data
    if(isNetworkStatusAvialable (getApplicationContext())) {
        Toast.makeText(getApplicationContext(), "Internet detected", Toast.LENGTH_SHORT).show();
        new FetchWebsiteData().execute();
    } else {
        Toast.makeText(getApplicationContext(), "Please check your Internet Connection", Toast.LENGTH_SHORT).show();

    }
public static boolean hasInternetAccess(Context context) {

    if (isNetworkAvailable(context)) {
        try {
            HttpURLConnection urlc = (HttpURLConnection) 
                (new URL("http://clients3.google.com/generate_204")
                .openConnection());
            urlc.setRequestProperty("User-Agent", "Android");
            urlc.setRequestProperty("Connection", "close");
            urlc.setConnectTimeout(1500); 
            urlc.connect();
            return (urlc.getResponseCode() == 204 &&
                        urlc.getContentLength() == 0);
        } catch (IOException e) {
            Log.e(TAG, "Error checking internet connection", e);
        }
    } else {
        Log.d(TAG, "No network available!");
    }
    return false;
}

这是获取有关您的互联网连接的信息的课程https://gist.github.com/emil2k/5130324

只需复制并粘贴代码并使用它的方法即可

创建一个类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" />

使用此方法检查网络可用性

public static boolean isNetworkAvailable(Context context) {



    try{
    ConnectivityManager connectivityManager 
          = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    boolean s= activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting();

        return s;
    }
    catch(Exception e){

        System.out.println("exception network"+e);
        return false;
    }
}

如果它返回true,你可以继续进行网络调用,否则Toast一个网络不可用的消息。

https://stackoverflow.com/a/9570292/4241807告诉您如何检查网络连接,然后将您的消息放在代码的“else”部分

使用下面的代码并创建一个类NetworkAvailablity.java

public class NetworkAvailablity {

    public static boolean checkNetworkStatus(Context context) {
        boolean HaveConnectedWifi = false;
        boolean HaveConnectedMobile = false;

        ConnectivityManager cm = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);

        NetworkInfo[] netInfo = cm.getAllNetworkInfo();
        for (NetworkInfo ni : netInfo) {
            if (ni.getTypeName().equalsIgnoreCase("WIFI"))
                if (ni.isConnected())
                    HaveConnectedWifi = true;
            if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
                if (ni.isConnected())
                    HaveConnectedMobile = true;
        }

        return HaveConnectedWifi || HaveConnectedMobile;
    }
}

在您的代码中使用以下行来检查互联网是否可用

        if (NetworkAvailablity.checkNetworkStatus(getActivity())) {
             //code here 
        }
        else
        {
        // give message here by Toast or create the alert dilog 
             Toast.makeText(context, "No network is available",Toast.LENGTH_LONG).show();
        }
//Implement this code in MainActivity and check if isConnectingToInternet(), then allow Otherwise show the No Internet Connection message.

public boolean isConnectingToInternet() {
            ConnectivityManager connectivity = (ConnectivityManager) _context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            if (connectivity != null) {
                NetworkInfo[] info = connectivity.getAllNetworkInfo();
                if (info != null)
                    for (int i = 0; i < info.length; i++)
                        if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                            return true;
                        }

            }
            return false;
        }

要检查用户是否连接到wifi或任何接入点,最好首先检查此方法以查看用户是否有任何连接,如果它返回true,您可以检查他是否与下一个方法有真正的连接

    public static boolean isOnline(Context context) {
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    return netInfo != null && netInfo.isConnectedOrConnecting();
}

检查用户是否有真正的流量通过网络发送请求

请注意,不应在主线程中调用hasTraffic()方法(可以使用AsyncTask)

public static boolean hasTraffic(){

    try {

        URL url = new URL("http://www.google.com/");
        HttpURLConnection urlc = (HttpURLConnection)url.openConnection();
        urlc.setRequestProperty("User-Agent", "test");
        urlc.setRequestProperty("Connection", "close");
        urlc.setConnectTimeout(2000); // mTimeout is in seconds
        urlc.connect();
        if (urlc.getResponseCode() == 200) {
            Log.d("check Traffic ", "has traffic");
            return true;
        } else {
            return  false;
        }
    } catch (Exception e) {
        Log.i("warning", "Error checking internet connection", e);
        return  false;
    }

}

检查互联网连接

        new AsyncTask<Void, Void, Boolean>() {
        @Override
        protected void onPostExecute(Boolean flag) {

            if(flag == true){
                // do whatever you want
            }else{
                cantAccessToService();
            }
        }

        @Override
        protected Boolean doInBackground(Void... voids) {
            if(isOnline(SplashActivity.this) && hasTraffic() ){
                return true ;
            }else{
                return false ;
            }
        }
    }.execute();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM