From 0baddea8ca4cecf88da3d9fb6fd1c0e491da9f8c Mon Sep 17 00:00:00 2001 From: s22thong <sylvain.thong@gmail.com> Date: Tue, 18 Mar 2025 16:50:19 +0100 Subject: [PATCH] ft(DX): Google Maps API key integration --- app/build.gradle | 2 + app/src/main/AndroidManifest.xml | 36 +++++++++--- .../myfirstapplication/MapsFragment.java | 57 +++++++++++++++++++ app/src/main/res/layout/fragment_maps.xml | 8 +++ build.gradle | 1 + gradle/libs.versions.toml | 4 ++ 6 files changed, 100 insertions(+), 8 deletions(-) create mode 100644 app/src/main/java/fr/imt_atlantique/myfirstapplication/MapsFragment.java create mode 100644 app/src/main/res/layout/fragment_maps.xml diff --git a/app/build.gradle b/app/build.gradle index d142883..8695b37 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,5 +1,6 @@ plugins { alias(libs.plugins.android.application) + alias(libs.plugins.google.android.libraries.mapsplatform.secrets.gradle.plugin) } android { @@ -34,6 +35,7 @@ dependencies { implementation libs.material implementation libs.activity implementation libs.constraintlayout + implementation libs.play.services.maps testImplementation libs.junit androidTestImplementation libs.ext.junit androidTestImplementation libs.espresso.core diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8a14c49..0cf6d19 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -5,8 +5,19 @@ <uses-feature android:name="android.hardware.telephony" android:required="false" /> + <uses-permission android:name="android.permission.CALL_PHONE" /> + <queries> + <intent> + <action android:name="android.intent.action.VIEW" /> + + <category android:name="android.intent.category.BROWSABLE" /> + + <data android:scheme="http" /> + </intent> + </queries> + <application android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" @@ -17,6 +28,22 @@ android:supportsRtl="true" android:theme="@style/Theme.MyFirstApplication" tools:targetApi="31"> + + <!-- + TODO: Before you run your application, you need a Google Maps API key. + + To get one, follow the directions here: + + https://developers.google.com/maps/documentation/android-sdk/get-api-key + + Once you have your API key (it starts with "AIza"), define a new property in your + project's local.properties file (e.g. MAPS_API_KEY=Aiza...), and replace the + "YOUR_API_KEY" string in this file with "${MAPS_API_KEY}". + --> + <meta-data + android:name="com.google.android.geo.API_KEY" + android:value="AIzaSyCNT1bes7ZrsjooT8IfPFejfBEXJ-PrfqI" /> + <activity android:name=".MainActivity" android:exported="true" @@ -29,11 +56,4 @@ </activity> </application> - <queries> - <intent> - <action android:name="android.intent.action.VIEW" /> - <category android:name="android.intent.category.BROWSABLE" /> - <data android:scheme="http" /> - </intent> - </queries> -</manifest> +</manifest> \ No newline at end of file diff --git a/app/src/main/java/fr/imt_atlantique/myfirstapplication/MapsFragment.java b/app/src/main/java/fr/imt_atlantique/myfirstapplication/MapsFragment.java new file mode 100644 index 0000000..35fc0f8 --- /dev/null +++ b/app/src/main/java/fr/imt_atlantique/myfirstapplication/MapsFragment.java @@ -0,0 +1,57 @@ +package fr.imt_atlantique.myfirstapplication; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +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 MapsFragment extends Fragment { + + private OnMapReadyCallback callback = new OnMapReadyCallback() { + + /** + * Manipulates the map once available. + * This callback is triggered when the map is ready to be used. + * This is where we can add markers or lines, add listeners or move the camera. + * In this case, we just add a marker near Sydney, Australia. + * If Google Play services is not installed on the device, the user will be prompted to + * install it inside the SupportMapFragment. This method will only be triggered once the + * user has installed Google Play services and returned to the app. + */ + @Override + public void onMapReady(GoogleMap googleMap) { + LatLng sydney = new LatLng(-34, 151); + googleMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney")); + googleMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); + } + }; + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, + @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + return inflater.inflate(R.layout.fragment_maps, container, false); + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + SupportMapFragment mapFragment = + (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map); + if (mapFragment != null) { + mapFragment.getMapAsync(callback); + } + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_maps.xml b/app/src/main/res/layout/fragment_maps.xml new file mode 100644 index 0000000..1b0e9ae --- /dev/null +++ b/app/src/main/res/layout/fragment_maps.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<fragment xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://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=".MapsFragment" /> \ No newline at end of file diff --git a/build.gradle b/build.gradle index 565f8c2..3d46f6c 100644 --- a/build.gradle +++ b/build.gradle @@ -1,4 +1,5 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { alias(libs.plugins.android.application) apply false + alias(libs.plugins.google.android.libraries.mapsplatform.secrets.gradle.plugin) apply false } \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index bc4e91d..32d82b5 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,6 +7,8 @@ appcompat = "1.6.1" material = "1.10.0" activity = "1.8.0" constraintlayout = "2.1.4" +googleAndroidLibrariesMapsplatformSecretsGradlePlugin = "2.0.1" +playServicesMaps = "18.1.0" [libraries] junit = { group = "junit", name = "junit", version.ref = "junit" } @@ -16,7 +18,9 @@ appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "a material = { group = "com.google.android.material", name = "material", version.ref = "material" } activity = { group = "androidx.activity", name = "activity", version.ref = "activity" } constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" } +play-services-maps = { group = "com.google.android.gms", name = "play-services-maps", version.ref = "playServicesMaps" } [plugins] android-application = { id = "com.android.application", version.ref = "agp" } +google-android-libraries-mapsplatform-secrets-gradle-plugin = { id = "com.google.android.libraries.mapsplatform.secrets-gradle-plugin", version.ref = "googleAndroidLibrariesMapsplatformSecretsGradlePlugin" } -- GitLab