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

Android-এ নেটওয়ার্ক প্রোভাইডার থেকে বর্তমান ঠিকানা পাওয়ার উপায়

অ্যান্ড্রয়েডে নেটওয়ার্ক প্রোভাইডার ব্যবহার করে বর্তমান ঠিকানা বের করা

এই টিউটোরিয়ালে আমরা দেখব কিভাবে অ্যান্ড্রয়েড অ্যাপ্লিকেশনে LocationManager এবং Geocoder ক্লাস ব্যবহার করে নেটওয়ার্ক প্রোভাইডার থেকে বর্তমান অবস্থানের ঠিকানা (Address) প্রাপ্ত করা যায়।

পূর্বশর্ত

  • অ্যান্ড্রয়েড স্টুডিও ইনস্টল করা থাকতে হবে
  • অ্যাপে লোকেশন পারমিশন যোগ করতে হবে
  • ডিভাইসে ইন্টারনেট কানেকশন থাকতে হবে (Geocoder-এর জন্য)

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

Android Studio খুলুন → File → New Project ক্লিক করুন → "Empty Activity" নির্বাচন করুন → প্রজেক্টের নাম, প্যাকেজ নাম এবং সংরক্ষণ লোকেশন দিন → Finish ক্লিক করুন।

ধাপ ২: লেআউট ফাইল সংশোধন করুন (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:gravity="center"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/text"
        android:textSize="30sp"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

এখানে একটি TextView ব্যবহার করা হয়েছে ঠিকানা প্রদর্শনের জন্য।

ধাপ ৩: MainActivity.java ফাইলে কোড যোগ করুন

package com.example.myapplication;

import android.Manifest;
import android.content.pm.PackageManager;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationManager;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

import java.io.IOException;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    TextView textView;
    Location location;
    List<Address> addresses;
    Geocoder geocoder;

    @RequiresApi(api = Build.VERSION_CODES.P)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = findViewById(R.id.text);

        LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

        // রানটাইম পারমিশন চেক
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
                && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 101);
            return;
        }

        // নেটওয়ার্ক প্রোভাইডার থেকে শেষ পরিচিত লোকেশন নিন
        location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
        geocoder = new Geocoder(this);
    }

    @RequiresApi(api = Build.VERSION_CODES.O)
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == 101) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                getAddressFromLocation();
            } else {
                textView.setText("লোকেশন পারমিশন অনুমোদন করা হয়নি");
            }
        }
    }

    @RequiresApi(api = Build.VERSION_CODES.O)
    @Override
    protected void onResume() {
        super.onResume();
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
                || ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
            getAddressFromLocation();
        }
    }

    private void getAddressFromLocation() {
        if (location == null) {
            textView.setText("লোকেশন পাওয়া যায়নি");
            return;
        }

        try {
            addresses = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
            if (addresses != null && !addresses.isEmpty()) {
                Address address = addresses.get(0);
                textView.setText(address.getAddressLine(0));
            } else {
                textView.setText("ঠিকানা পাওয়া যায়নি");
            }
        } catch (IOException e) {
            e.printStackTrace();
            textView.setText("ত্রুটি: " + e.getMessage());
        }
    }
}

ধাপ ৪: AndroidManifest.xml-এ পারমিশন যোগ করুন

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.myapplication">

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

টেস্টিং এবং রান করা

  1. আপনার অ্যান্ড্রয়েড ডিভাইস USB ডিবাগিং অন করে কম্পিউটারের সাথে কানেক্ট করুন
  2. Android Studio-তে Run বাটনে ক্লিক করুন
  3. ডিভাইস সিলেক্ট করুন এবং অ্যাপ লঞ্চ হবে
  4. অনুমতি দিন এবং কিছু সেকেন্ড অপেক্ষা করুন - বর্তমান ঠিকানা TextView-এ দেখাবে

Android-এ নেটওয়ার্ক প্রোভাইডার থেকে বর্তমান ঠিকানা পাওয়ার উপায়

গুরুত্বপূর্ণ নোট

  • NETWORK_PROVIDER GPS-এর চেয়ে কম সঠিক কিন্তু ব্যাটারি কম খায় এবং ইন্ডোরে ভালো কাজ করে
  • getLastKnownLocation() null রিটার্ন করতে পারে যদি সাম্প্রতিক লোকেশন ডেটা না থাকে
  • Geocoder ইন্টারনেট কানেকশন আশ্রিত, অফলাইনে কাজ করবে না
  • অ্যান্ড্রয়েড ১০+ এ ব্যাকগ্রাউন্ড লোকেশন অ্যাক্সেসের জন্য অতিরিক্ত পারমিশন লাগে
  1. এন্ড্রয়েডে বর্তমান Wi-Fi নেটওয়ার্ক ID পাওয়ার উপায়

  2. অ্যান্ড্রয়েডে কন্টেন্ট প্রোভাইডার থেকে ফোন নম্বর পাওয়ার পদ্ধতি

  3. অ্যান্ড্রয়েডে ইন্টারনেট থেকে বর্তমান তারিখ ও সময় পাওয়ার পদ্ধতি

  4. এন্ড্রয়েডে প্রোগ্রামেটিক্যালি বর্তমান GPS লোকেশন কীভাবে পাবেন?