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

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

অ্যান্ড্রয়েডে নেটওয়ার্ক লোকেশন থেকে লোকেল (Locale) তথ্য বের করা

এই উদাহরণে দেখানো হয়েছে কিভাবে Geocoder ক্লাস ব্যবহার করে নেটওয়ার্ক প্রোভাইডার থেকে প্রাপ্ত লোকেশনের লোকেল (ভাষা/দেশ সেটিং) তথ্য বের করা যায়।

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

  • ACCESS_COARSE_LOCATION
  • ACCESS_FINE_LOCATION
  • INTERNET (Geocoder-এর জন্য)

লেআউট (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>

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;
import java.util.Locale;

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 ইনিশিয়ালাইজ
        geocoder = new Geocoder(this, Locale.getDefault());
    }

    @RequiresApi(api = Build.VERSION_CODES.O)
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == 101 && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            showLocaleInfo();
        }
    }

    @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) {
            showLocaleInfo();
        }
    }

    private void showLocaleInfo() {
        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);
                // লোকেল তথ্য প্রদর্শন
                Locale locale = address.getLocale();
                String localeInfo = "Language: " + locale.getLanguage() + "\n" +
                                   "Country: " + locale.getCountry() + "\n" +
                                   "Display Name: " + locale.getDisplayName();
                textView.setText(localeInfo);
            }
        } 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 ...>
        <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>

লোকেল (Locale) তথ্যের ব্যবহারিতা

  • ব্যবহারকারীর ভাষা ও অঞ্চল অনুযায়ী অ্যাপ্লিকেশনের UI কাস্টোমাইজ করতে
  • দেশ-নির্দিষ্ট কন্টেন্ট, মুদ্রা, তারিখ ফরম্যাট নির্ধারণে
  • মাল্টি-ল্যাঙ্গুয়েজ সাপোর্টের জন্য ডিফল্ট ভাষা বেছে নেওয়ায়

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

  1. অ্যান্ড্রয়েডে ডিভাইস লোকেশন (সেল লোকেশন) পাওয়া

  2. অ্যান্ড্রয়েডে ডিভাইস আইডি কীভাবে পেতে হয়?

  3. অ্যান্ড্রয়েডে সিম সার্ভিস ইনফরমেশন (Service State) কীভাবে পেতে হয়?

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