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

Android-ে বর্তমান লোকেশন প্রোভাইডার ইনফরমেশন পাওয়ার উপায়

LocationManager থেকে বর্তমান লোকেশন প্রোভাইডার (Provider) নাম বের করা

এই উদাহরণে দেখানো হলো কিভাবে Location.getProvider() মেথড ব্যবহার করে বর্তমান লোকেশন কোন প্রোভাইডার (GPS, Network, Passive, Fused) থেকে আসছে তা জানা যায়।

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

public class MainActivity extends AppCompatActivity {

    TextView textView;
    Location location;

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

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

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

    private void showProvider() {
        if (location != null) {
            String provider = location.getProvider(); // "network", "gps", "passive", "fused"
            textView.setText("Provider: " + provider);
        } else {
            textView.setText("লোকেশন পাওয়া যায়নি");
        }
    }
}

প্রোভাইডার টাইপ এবং তাদের বৈশিষ্ট্য

প্রোভাইডারমানবিবরণ
GPS_PROVIDER"gps"উপগ্রহ ভিত্তিক, সবচেয়ে সঠিক (৫-১০ মি), আউটডোরে ভালো
NETWORK_PROVIDER"network"সেল টাওয়ার + Wi-Fi, মধ্যম সঠিক (১০০-১০০০ মি), ইন্ডোরে কাজ করে
PASSIVE_PROVIDER"passive"অন্য অ্যাপের লোকেশন শেয়ার করে, ব্যাটারি বাঁচায়
FUSED_PROVIDER"fused"Google Play Services-এ ভিত্তিক, সবচেয়ে বুদ্ধিমান ও ব্যাটারি দক্ষ

সর্বোত্তম অভ্যাস: FusedLocationProviderClient ব্যবহার করুন

আধুনিক অ্যান্ড্রয়েড ডেভেলপমেন্টে LocationManager বাদে Google Play Services-এর FusedLocationProviderClient ব্যবহার করা প্রস্তাবিত:

FusedLocationProviderClient fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
fusedLocationClient.getLastLocation()
    .addOnSuccessListener(location -> {
        if (location != null) {
            String provider = location.getProvider(); // "fused"
            // লোকেশন ব্যবহার করুন
        }
    });

Manifest

<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" />

Android-ে বর্তমান লোকেশন প্রোভাইডার ইনফরমেশন পাওয়ার উপায়

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

  2. অ্যান্ড্রয়েডে বর্তমান থ্রেডের আইডি (ID) পাওয়ার পদ্ধতি

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

  4. অ্যান্ড্রয়েডে বর্তমান লোকেশনের ল্যাটিটিউড এবং লองিটিউড কীভাবে পাবেন?