android - অ্যান্ড্রয়েড চেক ইন্টারনেট সংযোগ




networking android-networking (17)

এই প্রশ্নটি ইতিমধ্যে একটি উত্তর আছে:

আমি ইন্টারনেট ব্যবহার করে এমন একটি অ্যাপ্লিকেশন তৈরি করতে চাই এবং আমি এমন একটি ফাংশন তৈরি করার চেষ্টা করছি যা একটি সংযোগ উপলব্ধ থাকলে এবং যদি এটি না হয় তবে চেক করে, এমন একটি কার্যকলাপে যান যা একটি পুনরায় চেষ্টা বোতাম এবং একটি ব্যাখ্যা রয়েছে।

সংযুক্ত আমার কোড এখন পর্যন্ত, কিন্তু আমি ত্রুটি Syntax error, insert "}" to complete MethodBody.

এখন আমি এটিকে কাজে লাগানোর চেষ্টা করছি, কিন্তু এখনও পর্যন্ত ভাগ্য নেই ... কোন সাহায্যের প্রশংসা করা হবে।

public class TheEvoStikLeagueActivity extends Activity {
    private final int SPLASH_DISPLAY_LENGHT = 3000;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);

        private boolean checkInternetConnection() {
            ConnectivityManager conMgr = (ConnectivityManager) getSystemService (Context.CONNECTIVITY_SERVICE);
            // ARE WE CONNECTED TO THE NET
            if (conMgr.getActiveNetworkInfo() != null
                    && conMgr.getActiveNetworkInfo().isAvailable()
                    && conMgr.getActiveNetworkInfo().isConnected()) {

                return true;

                /* New Handler to start the Menu-Activity
                 * and close this Splash-Screen after some seconds.*/
                new Handler().postDelayed(new Runnable() {
                    public void run() {
                        /* Create an Intent that will start the Menu-Activity. */
                        Intent mainIntent = new Intent(TheEvoStikLeagueActivity.this, IntroActivity.class);
                        TheEvoStikLeagueActivity.this.startActivity(mainIntent);
                        TheEvoStikLeagueActivity.this.finish();
                    }
                }, SPLASH_DISPLAY_LENGHT);
            } else {
                return false;

                Intent connectionIntent = new Intent(TheEvoStikLeagueActivity.this, HomeActivity.class);
                TheEvoStikLeagueActivity.this.startActivity(connectionIntent);
                TheEvoStikLeagueActivity.this.finish();
            }
        }
    }

Answers

"প্রত্যাবর্তন" বিবৃতির পরে, আপনি কোনও কোড লিখতে পারবেন না (চেষ্টা-অবশেষে ব্লক বাদে)। "প্রত্যাবর্তন" বিবৃতির আগে আপনার নতুন কার্যকলাপ কোড সরান।


এই পদ্ধতি ব্যবহার করুন:

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

এই অনুমতি প্রয়োজন:

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

সমস্ত অফিসিয়াল পদ্ধতি শুধুমাত্র একটি ডিভাইস নেটওয়ার্ক জন্য খোলা কিনা বা না,
যদি আপনার ডিভাইসটি ওয়াইফাইয়ের সাথে সংযুক্ত থাকে তবে ওয়াইফাই ইন্টারনেটের সাথে সংযুক্ত না হয় তবে এই পদ্ধতিটি ব্যর্থ হবে (যা অনেক সময় ঘটে), কোনও ইনব্লিট নেটওয়ার্ক সনাক্তকরণ পদ্ধতি এই দৃশ্যকল্প সম্পর্কে জানবে না, তাই Async কলব্যাক ক্লাস তৈরি করেছে যা সংযোগে অ্যাক্সেস এবং সংযোগ সংযোগে ফিরে আসবে

        new CheckNetworkConnection(this, new CheckNetworkConnection.OnConnectionCallback() {

            @Override
            public void onConnectionSuccess() {
   Toast.makeText(context, "onSuccess()", toast.LENGTH_SHORT).show();
            }

            @Override
            public void onConnectionFail(String msg) {
   Toast.makeText(context, "onFail()", toast.LENGTH_SHORT).show();
            }
        }).execute();

Async কাজ থেকে নেটওয়ার্ক কল

public class CheckNetworkConnection extends AsyncTask<Void, Void, Boolean> {
private OnConnectionCallback onConnectionCallback;
private Context context;

public CheckNetworkConnection(Context con, OnConnectionCallback onConnectionCallback) {
     super();
     this.onConnectionCallback = onConnectionCallback;
    this.context = con;
}

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

@Override
protected Boolean doInBackground(Void... params) {
    if (context == null)
        return false;

    boolean isConnected = new NetWorkInfoUtility().isNetWorkAvailableNow(context);
    return isConnected;
}

@Override
protected void onPostExecute(Boolean b) {
    super.onPostExecute(b);

    if (b) {
        onConnectionCallback.onConnectionSuccess();
    } else {
        String msg = "No Internet Connection";
        if (context == null)
            msg = "Context is null";
        onConnectionCallback.onConnectionFail(msg);
    }

}

public interface OnConnectionCallback {
    void onConnectionSuccess();

    void onConnectionFail(String errorMsg);
}
}

সার্ভারে পিং করবে এমন আসল ক্লাস

class NetWorkInfoUtility {

public boolean isWifiEnable() {
    return isWifiEnable;
}

public void setIsWifiEnable(boolean isWifiEnable) {
    this.isWifiEnable = isWifiEnable;
}

public boolean isMobileNetworkAvailable() {
    return isMobileNetworkAvailable;
}

public void setIsMobileNetworkAvailable(boolean isMobileNetworkAvailable) {
    this.isMobileNetworkAvailable = isMobileNetworkAvailable;
}

private boolean isWifiEnable = false;
private boolean isMobileNetworkAvailable = false;

public boolean isNetWorkAvailableNow(Context context) {
    boolean isNetworkAvailable = false;

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

    setIsWifiEnable(connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected());
    setIsMobileNetworkAvailable(connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected());

    if (isWifiEnable() || isMobileNetworkAvailable()) {
        /*Sometime wifi is connected but service provider never connected to internet
        so cross check one more time*/
        if (isOnline())
            isNetworkAvailable = true;
    }

    return isNetworkAvailable;
}

public boolean isOnline() {
    /*Just to check Time delay*/
    long t = Calendar.getInstance().getTimeInMillis();

    Runtime runtime = Runtime.getRuntime();
    try {
        /*Pinging to Google server*/
        Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8");
        int exitValue = ipProcess.waitFor();
        return (exitValue == 0);
    } catch (IOException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    } finally {
        long t2 = Calendar.getInstance().getTimeInMillis();
        Log.i("NetWork check Time", (t2 - t) + "");
    }
    return false;
 }
}

আপনি ইন্টারনেট সংযোগ পরীক্ষা করতে নিম্নলিখিত স্নিপেট ব্যবহার করতে পারেন।

এটি উভয় উপায়ে উপকারী হবে যে আপনি কোন ধরনের নেটওয়ার্ক সংযোগ উপলব্ধ তা পরীক্ষা করতে পারেন যাতে আপনি এভাবে আপনার প্রক্রিয়া করতে পারেন।

আপনি শুধু নিম্নলিখিত প্যাড কপি এবং আপনার প্যাকেজে সরাসরি পেস্ট আছে।

/**
 * 
 * @author Pratik Butani
 * 
 */
public class InternetConnection {

    /** CHECK WHETHER INTERNET CONNECTION IS AVAILABLE OR NOT */
    public static boolean checkConnection(Context context) {
        final ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

        NetworkInfo activeNetworkInfo = connMgr.getActiveNetworkInfo();

        if (activeNetworkInfo != null) { // connected to the internet
            Toast.makeText(context, activeNetworkInfo.getTypeName(), Toast.LENGTH_SHORT).show();

            if (activeNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
                // connected to wifi
                return true;
            } else if (activeNetworkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
                // connected to the mobile provider's data plan
                return true;
            }
        }
        return false;
    }
}

এখন আপনি ব্যবহার করতে পারেন:

if (InternetConnection.checkConnection(context)) {
    // Its Available...
} else {
    // Not Available...
}

অনুমতি নিতে ভুলবেন না :) :)

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

আপনি আপনার প্রয়োজন উপর ভিত্তি করে পরিবর্তন করতে পারেন।

ধন্যবাদ.


1- নতুন জাভা ফাইল তৈরি করুন (ডান প্যাকেজটিতে ক্লিক করুন। নতুন> বর্গ> ফাইলটি ConnectionDetector.java করুন নাম ConnectionDetector.java

2- ফাইল নিম্নলিখিত কোড যোগ করুন

package <add you package name> example com.example.example;

import android.content.Context;
import android.net.ConnectivityManager;

public class ConnectionDetector {

    private Context mContext;

    public ConnectionDetector(Context context){
        this.mContext = context;
    }

    public boolean isConnectingToInternet(){

        ConnectivityManager cm = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
        if(cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnected() == true)
        {
            return true; 
        }

        return false;

    }
}

3- আপনার MainActivity.java - যে কার্যকলাপটি আপনি সংযোগ পরীক্ষা করতে চান তা খুলুন এবং নিম্নলিখিতটি করুন

এ- ফাংশন তৈরি এবং সংজ্ঞায়িত।

ConnectionDetector mConnectionDetector;</pre>

B- "OnCreate" এর ভিতরে নিচের যোগ করুন

mConnectionDetector = new ConnectionDetector(getApplicationContext());

সি- সংযোগ চেক নিম্নলিখিত পদক্ষেপ ব্যবহার করুন

if (mConnectionDetector.isConnectingToInternet() == false) {
//no connection- do something
} else {
//there is connection
}

নিম্নলিখিত কোডটি ব্যবহার করে দেখুন:

public static boolean isNetworkAvailable(Context context) {
        boolean outcome = false;

        if (context != null) {
            ConnectivityManager cm = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);

            NetworkInfo[] networkInfos = cm.getAllNetworkInfo();

            for (NetworkInfo tempNetworkInfo : networkInfos) {


                /**
                 * Can also check if the user is in roaming
                 */
                if (tempNetworkInfo.isConnected()) {
                    outcome = true;
                    break;
                }
            }
        }

        return outcome;
    }

আপনি যখন কোনও Wi-Fi উৎসের সাথে বা সেল ফোন ডেটা প্যাকের মাধ্যমে সংযুক্ত হন তখন উপরের পদ্ধতিগুলি কাজ করে। তবে আপনি Wi-Fi সংযোগের ক্ষেত্রে ক্যাফের মতো সাইন ইন করতে আরও কিছু জিজ্ঞাসা করবেন। সুতরাং সেই ক্ষেত্রে আপনার অ্যাপ্লিকেশন ব্যর্থ হবে যেমন আপনি Wi-Fi উৎসের সাথে সংযুক্ত কিন্তু ইন্টারনেটের সাথে নয়।

এই পদ্ধতি জরিমানা কাজ করে।

    public static boolean isConnected(Context context) {
        ConnectivityManager cm = (ConnectivityManager)context
                .getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    if (activeNetwork != null && activeNetwork.isConnected()) {
        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(1000); // mTimeout is in seconds
            urlc.connect();
            if (urlc.getResponseCode() == 200) {
                return true;
            } else {
                return false;
            }
        } catch (IOException e) {
            Log.i("warning", "Error checking internet connection", e);
            return false;
        }
    }

    return false;

}

প্রধান থ্রেড থেকে পৃথক থ্রেডে এটি ব্যবহার করুন কারণ এটি একটি নেটওয়ার্ক কল করে এবং অনুসরণ না করলে NetwrokOnMainThreadException টেনে আনবে।

এবং ক্রিয়েট বা অন্য কোন পদ্ধতিতে ভিতরে এই পদ্ধতিটি রাখুন না। এটি একটি বর্গ ভিতরে রাখুন এবং এটি অ্যাক্সেস।


আমার ইস্যুতে ইন্টারনেটভিত্তিক উত্তরগুলি ছিল সেলুলার নেটওয়ার্কগুলির জন্য পরীক্ষার নয়, কেবলমাত্র যদি ওয়াইফাই সংযুক্ত থাকে। এই উত্তরটি ওয়াইফাই এবং মোবাইল ডেটা উভয়ের জন্য কাজ করে:

কিভাবে WiFi এবং 3G (ডেটা প্ল্যান) মোবাইলে নেটওয়ার্ক সংযোগ সক্ষম বা নিষ্ক্রিয় করবেন?


ইন্টারনেট ডেটা গতি সঙ্গে অ্যান্ড্রয়েড পাওয়া নেটওয়ার্ক চেক করুন।

public boolean isConnectingToInternet(){
        ConnectivityManager connectivity = (ConnectivityManager) Login_Page.this.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)
                      {
                          try
                            {
                                HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.google.com").openConnection());
                                urlc.setRequestProperty("User-Agent", "Test");
                                urlc.setRequestProperty("Connection", "close");
                                urlc.setConnectTimeout(500); //choose your own timeframe
                                urlc.setReadTimeout(500); //choose your own timeframe
                                urlc.connect();
                                int networkcode2 = urlc.getResponseCode();
                                return (urlc.getResponseCode() == 200);
                            } catch (IOException e)
                            {
                                return (false);  //connectivity exists, but no internet.
                            }
                      }

          }
          return false;
    }

এই ফাংশন সত্য বা মিথ্যা ফিরে। ব্যবহারকারী অনুমতি পেতে হবে

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

এটি একটি নেটওয়ার্কের সাথে "সংযুক্ত" কিনা তা নিশ্চিত করতে চেক করুন:

public boolean isNetworkAvailable(Context context) {
    final ConnectivityManager connectivityManager = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE));
    return connectivityManager.getActiveNetworkInfo() != null && connectivityManager.getActiveNetworkInfo().isConnected();
}

এটি একটি নেটওয়ার্কের সাথে "সংযুক্ত" কিনা তা নিশ্চিত করতে চেক করুন:

public boolean isInternetAvailable() {
    try {
        final InetAddress address = InetAddress.getByName("www.google.com");
        return !address.equals("");
    } catch (UnknownHostException e) {
        // Log error
    }
    return false;
}

অনুমতি প্রয়োজন:

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

https://.com/a/17583324/950427


গ্রহনযোগ্য উত্তরটি সম্পাদনা করে দেখায় যে ইন্টারনেটে কী কিছু পৌঁছাতে পারে তা কীভাবে যাচাই করা যায়। এই ক্ষেত্রে না হওয়া পর্যন্ত আমাকে একটি উত্তরের জন্য অনেকক্ষণ অপেক্ষা করতে হয়েছিল (একটি ওয়াইফাই যার সাথে ইন্টারনেট সংযোগ নেই)। দুর্ভাগ্যবশত InetAddress.getByName এর সময়সীমা প্যারামিটার নেই, তাই পরবর্তী কোডটি তার চারপাশে কাজ করে:

private boolean internetConnectionAvailable(int timeOut) {
    InetAddress inetAddress = null;
    try {
        Future<InetAddress> future = Executors.newSingleThreadExecutor().submit(new Callable<InetAddress>() {
            @Override
            public InetAddress call() {
                try {
                    return InetAddress.getByName("google.com");
                } catch (UnknownHostException e) {
                    return null;
                }
            }
        });
        inetAddress = future.get(timeOut, TimeUnit.MILLISECONDS);
        future.cancel(true);
    } catch (InterruptedException e) {
    } catch (ExecutionException e) {
    } catch (TimeoutException e) {
    } 
    return inetAddress!=null && !inetAddress.equals("");
}

এটি সমস্ত পরিস্থিতি পরিচালনা করার অন্য একটি বিকল্প:

public void isNetworkAvailable() {
    ConnectivityManager connectivityManager = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) {
    } else {
        Toast.makeText(ctx, "Internet Connection Is Required", Toast.LENGTH_LONG).show();

    }
}

আপনি অন্য পদ্ধতির ভিতরে একটি পদ্ধতি তৈরি করতে পারবেন না, private boolean checkInternetConnection() { পদ্ধতির বাইরে তৈরি করুন


এই পদ্ধতিটি মোবাইলের সাথে সংযুক্ত কিনা তা যাচাই করে এবং সংযুক্ত থাকলে সত্য ফেরত দেয়:

private boolean isNetworkConnected() {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

    return cm.getActiveNetworkInfo() != null;
}

প্রকাশ্যে,

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

সম্পাদনা: ডিভাইসটি ইন্টারনেটের সাথে সংযুক্ত থাকলে এই পদ্ধতিটি আসলেই চেক করে (এটি একটি নেটওয়ার্ক থেকে সংযুক্ত তবে ইন্টারনেটে নয় এমন একটি সম্ভাবনা রয়েছে)।

public boolean isInternetAvailable() {
    try {
        InetAddress ipAddr = InetAddress.getByName("google.com"); 
        //You can replace it with your name
            return !ipAddr.equals("");

        } catch (Exception e) {
            return false;
    }
}

public boolean checkInternetConnection(Context context) {
    ConnectivityManager connectivity = (ConnectivityManager) context
        .getSystemService(Context.CONNECTIVITY_SERVICE);
    if (connectivity == null) {
        return false;
    } else {
        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;
}

কোন জটিল হতে হবে। সহজ এবং কাঠামো পদ্ধতি ACCESS_NETWORK_STATE অনুমতিটি ব্যবহার করা এবং কেবল একটি সংযুক্ত পদ্ধতি তৈরি করা

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

যদি আপনি একটি কণাগত হোস্ট এবং সংযোগের ধরন (ওয়াইফাই / মোবাইল) মনে করেন তবে আপনি requestRouteToHost ব্যবহার করতে পারেন।

আপনি প্রয়োজন হবে:

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

আপনার অ্যান্ড্রয়েড ম্যানিফেস্টে।

আরো বিস্তারিত জানার জন্য এখানে যান


আমার সমাধানটি যদি উপর চাপানো হয় না তা নিশ্চিত না করে তবে আমি দৃঢ় পরিষেবাটি ব্যবহার করে দেখুন ViewModel রাষ্ট্রটি। আপনি পরিষেবাতে মেমরিতে এটি সংরক্ষণ করেন বা একটি SQLLite ডাটাবেস থেকে পুনরুদ্ধার করুন এবং আপনার প্রয়োজনীয়তা উপর নির্ভর করে কিনা। কোনও গন্ধের এই পরিষেবাগুলি কি, তারা অ্যাপ্লিকেশন রাজ্য এবং বিমূর্ত সাধারণ ব্যবসায়িক লজিক বজায় রাখার মতো পরিষেবাগুলি সরবরাহ করে।

মেমরি এবং প্রসেসিং সীমাবদ্ধতাগুলি মোবাইল ডিভাইসগুলিতে অন্তর্নিহিত কারণে, আমি একটি ওয়েব পৃষ্ঠাতে একই ভাবে Android মতামত ব্যবহার করি। পৃষ্ঠাটি বজায় রাখে না, এটি সম্পূর্ণরূপে একটি উপস্থাপনা স্তর উপাদান যার একমাত্র উদ্দেশ্য আবেদন রাষ্ট্র উপস্থাপন এবং ব্যবহারকারী ইনপুট গ্রহণ করা হয়। ওয়েব অ্যাপ্লিকেশন আর্কিটেকচারের সাম্প্রতিক প্রবণতা বয়স্ক মডেল, ভিউ, কন্ট্রোলার (এমভিসি) প্যাটার্ন ব্যবহার করে, যেখানে পৃষ্ঠাটি দেখুন, ডোমেন ডেটা মডেল এবং নিয়ামক একটি ওয়েব পরিষেবাদির পিছনে বসে আছে। একই প্যাটার্নটি ভিউয়ের সাথে ভালভাবে অ্যান্ড্রয়েডে নিযুক্ত করা যেতে পারে ... দেখুন, মডেলটি আপনার ডোমেন ডেটা এবং কন্ট্রোলারটি Android ভিত্তিক পরিষেবা হিসাবে প্রয়োগ করা হয়েছে। যখনই আপনি কন্ট্রোলারের সাথে ইন্টারঅ্যাক্ট করার জন্য একটি দৃশ্য চান, তখন শুরু / পুনঃসূচনা করুন এবং স্টপ / বিরাম বন্ধ করুন।

এই পদ্ধতিটি আপনাকে কনসার্ন ডিজাইন নীতির পৃথকীকরণের জোরালো বোনাস দেয় যাতে আপনার সমস্ত অ্যাপ্লিকেশন ব্যবসায়িক লজিক আপনার পরিষেবাতে স্থানান্তরিত হতে পারে যা একাধিক মতামত জুড়ে সদৃশ লজিককে হ্রাস করে এবং দৃশ্যটি অন্য গুরুত্বপূর্ণ নকশা নীতি, একক দায়বদ্ধতা প্রয়োগ করার অনুমতি দেয়।







android networking android-networking