Android-এ Location API ব্যবহার করে বর্তমান লোকেশন ট্র্যাক করার পদ্ধতি
এই উদাহরণটি দেখায় কিভাবে Google Maps SDK এবং FusedLocationProviderClient ব্যবহার করে ব্যবহারকারীর বর্তমান অবস্থান (ল্যাটিটিউড/লองিটিউড) পেতে হয় এবং মানচিত্রে দেখাতে হয়।
⚠️ গুরুত্বপূর্ণ পরিবর্তন (2024+): Google Play Services Location API-এর পুরানো
FusedLocationApi ডিপ্রিকেট করা হয়েছে। আধুনিক অ্যাপের জন্য FusedLocationProviderClient (play-services-location) এবং Google Maps SDK (play-services-maps) আলাদা লাইব্রেরি। এই টিউটোরিয়ালে Maps SDK-র সাথে বেসিক লোকেশন দেখানো হয়েছে। রিয়েল-টাইম লোকেশন আপডেটের জন্য FusedLocationProviderClient ব্যবহার করুন।
প্রয়োজনীয় ধাপসমূহ
ধাপ ১: নতুন প্রজেক্ট তৈরি করুন এবং ডিপেন্ডেন্সি যোগ করুন
build.gradle (Module: app) ফাইলে:
dependencies {
// Google Maps SDK
implementation 'com.google.android.gms:play-services-maps:18.2.0'
// Location Services (রিয়েল-টাইম লোকেশন আপডেটের জন্য)
implementation 'com.google.android.gms:play-services-location:21.0.1'
}
ধাপ ২: Google Maps API Key পান
- Google Cloud Console-এ যান
- নতুন প্রজেক্ট তৈরি করুন বা বিদ্যমান প্রজেক্ট সিলেক্ট করুন
- APIs & Services → Library-এ যান
- Maps SDK for Android এবং Places API (ঐচ্ছিক) Enable করুন
- Credentials → Create Credentials → API Key
- API Key-র সীমাবদ্ধতা সেট করুন (Android apps, SHA-1 fingerprint, package name)
ধাপ ৩: লেআউট ফাইল (res/layout/activity_maps.xml)
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MapsActivity" />
ধাপ ৪: MapsActivity.java বাস্তবায়ন করুন
import androidx.annotation.NonNull;
import androidx.fragment.app.FragmentActivity;
import android.Manifest;
import android.content.pm.PackageManager;
import android.location.Location;
import android.os.Bundle;
import android.widget.Toast;
import com.google.android.gms.location.FusedLocationProviderClient;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.tasks.OnSuccessListener;
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
private GoogleMap mMap;
private FusedLocationProviderClient fusedLocationClient;
private static final int LOCATION_PERMISSION_REQUEST_CODE = 1001;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(@NonNull GoogleMap googleMap) {
mMap = googleMap;
// মানচিত্র সেটিংস
mMap.getUiSettings().setZoomControlsEnabled(true);
mMap.getUiSettings().setMyLocationButtonEnabled(true);
// লোকেশন পারমিশন চেক করুন
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
enableMyLocation();
} else {
requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_PERMISSION_REQUEST_CODE);
}
}
private void enableMyLocation() {
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
mMap.setMyLocationEnabled(true);
// বর্তমান লোকেশন পান (One-shot)
fusedLocationClient.getLastLocation()
.addOnSuccessListener(this, new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
if (location != null) {
LatLng currentLatLng = new LatLng(location.getLatitude(), location.getLongitude());
addMarkerAndMoveCamera(currentLatLng, "আপনার বর্তমান অবস্থান");
} else {
// লোকেশন নাল হলে (GPS বন্ধ থাকলে) ডিফল্ট লোকেশন দেখান
LatLng defaultLocation = new LatLng(23.8103, 90.4125); // ঢাকা, বাংলাদেশ
addMarkerAndMoveCamera(defaultLocation, "ডিফল্ট অবস্থান (ঢাকা)");
Toast.makeText(MapsActivity.this, "GPS অনলাইন করুন যাতে সঠিক লোকেশন পাওয়া যায়", Toast.LENGTH_LONG).show();
}
}
});
}
private void addMarkerAndMoveCamera(LatLng latLng, String title) {
mMap.addMarker(new MarkerOptions().position(latLng).title(title));
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 15f));
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == LOCATION_PERMISSION_REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
enableMyLocation();
} else {
Toast.makeText(this, "লোকেশন পারমিশন দরকার", Toast.LENGTH_LONG).show();
}
}
}
}
ধাপ ৫: Strings.xml-এ API Key যোগ করুন (res/values/strings.xml)
<resources>
<string name="app_name">Location Demo</string>
<string name="google_maps_key" templateMergeStrategy="preserve" translatable="false">YOUR_API_KEY_HERE</string>
</resources>
⚠️ নিরাপত্তা: রিয়েল API Key কখনো GitHub বা পাবলিক রিপোতে কমিট করবেন না।local.properties-এMAPS_API_KEY=your_keyরাখুন এবং Gradle-এbuildConfigFieldবাmanifestPlaceholdersব্যবহার করুন।
ধাপ ৬: AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.com.sample">
<!-- লোকেশন পারমিশন -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- Android 10+ ব্যাকগ্রাউন্ড লোকেশনের জন্য -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<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">
<!-- Google Maps API Key -->
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/google_maps_key" />
<activity
android:name=".MapsActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
রিয়েল-টাইম লোকেশন আপডেট (Location Callback)
শুধু একবার না, নিয়মিত লোকেশন আপডেট পেতে:
private LocationCallback locationCallback = new LocationCallback() {
@Override
public void onLocationResult(@NonNull LocationResult locationResult) {
for (Location location : locationResult.getLocations()) {
LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
// মার্কার আপডেট করুন
if (currentMarker != null) currentMarker.remove();
currentMarker = mMap.addMarker(new MarkerOptions().position(latLng).title("বর্তমান অবস্থান"));
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 15f));
}
}
};
// লোকেশন রিকোয়েস্ট কনফিগারেশন
LocationRequest locationRequest = LocationRequest.create()
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
.setInterval(5000) // ৫ সেকেন্ড ইন্টারভাল
.setFastestInterval(2000) // ২ সেকেন্ড ফাস্টেস্ট
.setSmallestDisplacement(10); // ১০ মিটার সরলে আপডেট
// শুরু করুন
fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper());
// বন্ধ করুন (onDestroy-এ)
fusedLocationClient.removeLocationUpdates(locationCallback);
Location Permission Best Practices
- ACCESS_FINE_LOCATION: GPS-স্তরের নির্ভুলতা (~10 মিটার)। নেভিগেশন, ফিটনেস অ্যাপের জন্য।
- ACCESS_COARSE_LOCATION: ওয়ার্কফাই/সেল টাওয়ার-ভিত্তিক (~100-1000 মিটার)। হাওয়ার προβেশন, এলাকা-ভিত্তিক সার্ভিসের জন্য।
- ACCESS_BACKGROUND_LOCATION: Android 10+ এ ব্যাকগ্রাউন্ডে লোকেশন পেতে আলাদা পারমিশন এবং Play Store-अনুমোদন দরকার।
- পারমিশন রেশনেল দেখান (
shouldShowRequestPermissionRationale) কারণ ব্যবহারকারী কেন দেবে তা বুঝতে পারেন।
অ্যাপ্লিকেশন চালানোর পদ্ধতি
- আপনার ডিভাইসে GPS অনলাইন করুন
- Android Studio-তে Run আইকনে ক্লিক করুন
- পারমিশন ডায়ালগে "Allow" চাপুন
- মানচিত্রে আপনার বর্তমান অবস্থান মার্কার সহ দেখাবে
