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

অ্যান্ড্রয়েডে Google Maps-এ টাচ ও অবস্থান ডিটেক্ট করা

Google Maps SDK-এ ক্যামেরা মুভমেন্ট লিসেনার দিয়ে ইউজার জেসচার ডিটেকশন

এই উদাহরণটি দেখাবে কীভাবে Google Map-এ ব্যবহারকারীর টাচ/জেসচার (স্ক্রল, জুম, ট্যাপ) ডিটেক্ট করা যায় এবং ক্যামেরার অবস্থান (LatLng) জানা যায়।

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

Android Studio-তে File → New → Google Maps Activity নির্বাচন করুন। এটি স্বয়ংক্রিয়ভাবে MapsActivity এবং/google_maps_api.xml তৈরি করবে।

ধাপ ২: লেআউট (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.fragment.app.FragmentActivity;
import android.os.Bundle;
import android.widget.Toast;
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;

public class MapsActivity extends FragmentActivity implements
        OnMapReadyCallback,
        GoogleMap.OnCameraMoveStartedListener,
        GoogleMap.OnCameraMoveListener,
        GoogleMap.OnCameraMoveCanceledListener,
        GoogleMap.OnCameraIdleListener {

    private GoogleMap mMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);

        SupportMapFragment mapFragment = (SupportMapFragment)
                getSupportFragmentManager().findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        // সিডনিয়ে মার্কার যোগ করুন
        LatLng sydney = new LatLng(-34, 151);
        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));

        // ক্যামেরা লিসেনার রেজিস্টার করুন
        mMap.setOnCameraIdleListener(this);
        mMap.setOnCameraMoveStartedListener(this);
        mMap.setOnCameraMoveListener(this);
        mMap.setOnCameraMoveCanceledListener(this);
    }

    @Override
    public void onCameraMoveStarted(int reason) {
        if (reason == GoogleMap.OnCameraMoveStartedListener.REASON_GESTURE) {
            Toast.makeText(this, "The user gestured on the map.", Toast.LENGTH_SHORT).show();
        } else if (reason == GoogleMap.OnCameraMoveStartedListener.REASON_API_ANIMATION) {
            Toast.makeText(this, "The user tapped something on the map.", Toast.LENGTH_SHORT).show();
        } else if (reason == GoogleMap.OnCameraMoveStartedListener.REASON_DEVELOPER_ANIMATION) {
            Toast.makeText(this, "The app moved the camera.", Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    public void onCameraMove() {
        Toast.makeText(this, "The camera is moving.", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onCameraMoveCanceled() {
        Toast.makeText(this, "Camera movement canceled.", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onCameraIdle() {
        // ক্যামেরা থামলে বর্তমান কেন্দ্র বিন্দু পান
        LatLng center = mMap.getCameraPosition().target;
        Toast.makeText(this, "Camera idle at: " + center.latitude + ", " + center.longitude, Toast.LENGTH_SHORT).show();
    }
}

ধাপ ৪: Google Maps API Key (res/values/google_maps_api.xml)

<resources>
    <string name="google_maps_key" templateMergeStrategy="preserve" translatable="false">YOUR_MAP_KEY</string>
</resources>

দ্রষ্টব্য: YOUR_MAP_KEY-কে Google Cloud Console থেকে প্রাপ্ত আপনার Maps SDK API Key দিয়ে প্রতিস্থাপন করুন।

ধাপ ৫: মেনিফেস্ট (androidManifest.xml)

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

    <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=".MapsActivity"
            android:label="@string/title_activity_maps">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="@string/google_maps_key" />
    </application>

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

গুরুত্বপূর্ণ দ্রষ্টব্য

  • OnCameraMoveStartedListener.REASON_GESTURE: ইউজার ম্যাপে টাচ/ড্র্যাগ/পিন্চ করলে।
  • onCameraIdle()-এ mMap.getCameraPosition().target দিয়ে বর্তমান ল্যাট/লং পাওয়া যায়।
  • অনুমতি: ACCESS_FINE_LOCATION লোকেশন ব্লু ডটের জন্য লাগে।
  • API Key-তে Maps SDK for Android এনাবল থাকতে হবে।

ফলাফল

ম্যাপে টাচ/স্ক্রল করলে টোস্টে "The user gestured on the map." দেখাবে। ক্যামেরা থামলে বর্তমান কোঅর্ডিনেট দেখাবে।

অ্যান্ড্রয়েডে Google Maps-এ টাচ ও অবস্থান ডিটেক্ট করা

  1. অ্যান্ড্রয়েডে "OK Google" অন এবং অফ করার পদ্ধতি

  2. 如何在Android上下载并安装Google Play

  3. অ্যান্ড্রয়েডে Google DNS এবং OpenDNS ব্যবহার করার পদ্ধতি

  4. অ্যান্ড্রয়েড ব্যাটারি রিক্যালিব্রেট করে ব্যাটারি লাইফ উন্নত করুন