কম্পিউটার টিউটোরিয়াল

অ্যান্ড্রয়েড জাভা থেকে এক্সটার্নাল IP পিং করার পদ্ধতি

Runtime.exec() এবং Ping কমান্ড ব্যবহার করে নেটওয়ার্ক কানেক্টিভিটি চেক করা

অ্যান্ড্রয়েডে জাভা থেকে এক্সটার্নাল IP বা হোস্ট পিং করার জন্য `Runtime.getRuntime().exec()` ব্যবহার করে সিস্টেম পিং কমান্ড চালানো হয়। এটি নেটওয়ার্ক কানেক্টিভিটি যাচাই করার একটি পদ্ধতি।

ধাপ ১: প্রজেক্ট তৈরি করুন

স্ট্যান্ডার্ড অ্যান্ড্রয়েড প্রজেক্ট।

ধাপ ২: সিম্পল লেআউট

res/layout/activity_main.xml - শুধু একটি TextView:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>

ধাপ ৩: পিং এবং নেটওয়ার্ক চেক লজিক

src/MainActivity.java:

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
import java.io.IOException;

public class MainActivity extends AppCompatActivity {
    Boolean isConnected = false, isWiFi = false, isMobile = false;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        checkNetworkAndPing();
    }
    
    private void checkNetworkAndPing() {
        ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        
        if (activeNetwork != null) {
            isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;
            isMobile = activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE;
            isConnected = activeNetwork.isConnectedOrConnecting();
        }
        
        if (isConnected) {
            String networkType = isWiFi ? "WiFi" : "Mobile";
            Toast.makeText(this, "Connected via " + networkType, Toast.LENGTH_SHORT).show();
            
            // গুগল DNS (8.8.8.8) পিং করুন
            if (isConnectedToServer("8.8.8.8")) {
                Toast.makeText(this, "Internet accessible (Google DNS reachable)", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(this, "No internet connection (DNS unreachable)", Toast.LENGTH_SHORT).show();
            }
        } else {
            Toast.makeText(this, "No Network Connection", Toast.LENGTH_SHORT).show();
        }
    }
    
    public boolean isConnectedToServer(String host) {
        Runtime runtime = Runtime.getRuntime();
        try {
            // পিং কমান্ড: -c 1 = ১বার পিং, -W 3 = ৩ সেকেন্ড টাইমআউট
            String command = "/system/bin/ping -c 1 -W 3 " + host;
            Process ipProcess = runtime.exec(command);
            int exitValue = ipProcess.waitFor();
            return (exitValue == 0); // ০ = সাফল্য
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
            return false;
        }
    }
}

ধাপ ৪: প্রয়োজনীয় পারমিশন

AndroidManifest.xml:

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

গুরুত্বপূর্ণ বিবেচনা

⚠️ সীমাবদ্ধতা:
  • /system/bin/ping সব ডিভাইসে থাকতে পারে না (রুট বা নির্দিষ্ট বিল্ডে)
  • SELinux পলিসি পিং এক্সিকিউশন ব্লক করতে পারে
  • মেইন থ্রেডে ব্লকিং কল (`waitFor()`) - ANR হতে পারে
  • ICMP পিং ব্লক করা ফায়ারওয়াল/রাউটারে কাজ করে না

উন্নত পদ্ধতি: InetAddress (ICMP ছাড়া)

public boolean isHostReachable(String host, int timeoutMs) {
    try {
        return InetAddress.getByName(host).isReachable(timeoutMs);
    } catch (IOException e) {
        return false;
    }
}

// অ্যাসিনক্রোনাস.version (কoretoutines/RxJava)
Completable.fromAction(() -> {
    boolean reachable = InetAddress.getByName("8.8.8.8").isReachable(3000);
    // UI আপডেট
}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe();

NetworkCallback API (API 21+) - সেরা পদ্ধতি

ConnectivityManager cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkRequest request = new NetworkRequest.Builder()
    .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
    .build();

cm.registerNetworkCallback(request, new ConnectivityManager.NetworkCallback() {
    @Override
    public void onAvailable(@NonNull Network network) {
        // ইন্টারনেট উপলব্ধ
    }
    
    @Override
    public void onLost(@NonNull Network network) {
        // ইন্টারনেট হারিয়ে গেছে
    }
});
অ্যান্ড্রয়েড জাভা থেকে এক্সটার্নাল IP পিং করার পদ্ধতি অ্যান্ড্রয়েড জাভা থেকে এক্সটার্নাল IP পিং করার পদ্ধতি
  1. অ্যান্ড্রয়েডে Toast মেসেজ দেখানোর পদ্ধতি

  2. অ্যান্ড্রয়েড থেকে ম্যালওয়্যার সরানোর উপায়

  3. Android থেকে AirTags খুঁজে বের করার পদ্ধতি?

  4. অ্যান্ড্রয়েড থেকে পিসিতে ফাইল ট্রান্সফার: দ্রুত ও নিরাপদে ধাপে ধাপে গাইড