I am currently stuck with this problem: Google Maps seems not to be loading at all. Please see the image below:
This is really driving me crazy. I already have done the following:
This is the code of my fragment:
import android.content.Context;
import android.content.pm.FeatureInfo;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.ErrorDialogFragment;
import com.google.android.gms.common.GoogleApiAvailability;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.MapView;
import com.google.android.gms.maps.MapsInitializer;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
public class MapsActivity extends Fragment implements OnMapReadyCallback {
private MapFragment mapFragment;
protected boolean readyToGo() {
GoogleApiAvailability checker=
GoogleApiAvailability.getInstance();
int status=checker.isGooglePlayServicesAvailable(getActivity());
if (status == ConnectionResult.SUCCESS) {
if (getVersionFromPackageManager(getActivity())>=2) {
return(true);
}
else {
Toast.makeText(getActivity(), "no maps", Toast.LENGTH_LONG).show();
}
}
else if (checker.isUserResolvableError(status)) {
}
else {
Toast.makeText(getActivity(),"no maps", Toast.LENGTH_LONG).show();
}
return(false);
}
private static int getVersionFromPackageManager(Context context) {
PackageManager packageManager=context.getPackageManager();
FeatureInfo[] featureInfos=
packageManager.getSystemAvailableFeatures();
if (featureInfos != null && featureInfos.length > 0) {
for (FeatureInfo featureInfo : featureInfos) {
// Null feature name means this feature is the open
// gl es version feature.
if (featureInfo.name == null) {
if (featureInfo.reqGlEsVersion != FeatureInfo.GL_ES_VERSION_UNDEFINED) {
return getMajorVersion(featureInfo.reqGlEsVersion);
}
else {
return 1; // Lack of property means OpenGL ES
// version 1
}
}
}
}
return 1;
}
private static int getMajorVersion(int glEsVersion) {
return((glEsVersion & 0xffff0000) >> 16);
}
public static MapsActivity newInstance() {
MapsActivity fragment = new MapsActivity();
return fragment;
}
public MapsActivity() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
readyToGo();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_maps, null, false);
SupportMapFragment mapFragment = (SupportMapFragment) this.getChildFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
return view;
}
@Override
public void onMapReady(GoogleMap googleMap) {
LatLng augsburg = new LatLng(48.348527, 10.915952);
if (ActivityCompat.checkSelfPermission(getActivity(), android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivity(), android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
googleMap.setMyLocationEnabled(true);
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(augsburg, 13));
googleMap.addMarker(new MarkerOptions()
.title("Augsburg Zoo")
.snippet("Der coolste Zoo der Welt")
.position(augsburg));
}
}
And this is the code for my layout:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/constraintLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<TextView
android:id="@+id/textView15"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Coming soon!"
android:textColor="@color/colorPrimary"
android:textSize="30sp"
android:visibility="invisible" />
</RelativeLayout>
Can anyone tell what still I'm missing?
LOGCAT:
10-17 15:33:25.917 1637-1648/system_process I/ActivityManager: Killing 2335:com.google.android.apps.maps/u0a39 (adj 15): empty #17
10-17 15:33:43.441 3591-3591/com.apptechgateway.AppTech I/DynamiteModule: Considering local module com.google.android.gms.maps_dynamite:0 and remote module com.google.android.gms.maps_dynamite:220
Selected remote version of com.google.android.gms.maps_dynamite, version >= 220
10-17 15:33:43.464 3800-3800/? E/dex2oat: Failed to create oat file: /data/dalvik-cache/x86_64/data@[email protected]@app_chimera@m@[email protected]@classes.dex: Permission denied
10-17 15:33:43.465 3591-3591/com.apptechgateway.AppTech W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg --debuggable --instruction-set=x86_64 --instruction-set-features=smp,ssse3,sse4.1,sse4.2,-avx,-avx2 --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=x86_64 --instruction-set-features=default --dex-file=/data/data/com.google.android.gms/app_chimera/m/00000006/MapsDynamite.apk --oat-file=/data/dalvik-cache/x86_64/data@[email protected]@app_chimera@m@[email protected]@classes.dex) because non-0 exit status
10-17 15:33:43.514 3591-3591/com.apptechgateway.AppTech I/Google Maps Android API: Google Play services client version: 12451000
10-17 15:33:43.517 3591-3591/com.apptechgateway.AppTech I/Google Maps Android API: Google Play services package version: 12874027
10-17 15:33:56.802 3591-3591/com.apptechgateway.AppTech I/Google Maps Android API: Google Play services package version: 12874027
Please note that when I use the same API_KEY to other map projects, it is perfectly working. It seems that the map is not showing on my app but working on other projects.
These are my dependecies:
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:design:28.0.0-rc02'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:support-v4:28.0.0'
implementation 'com.google.android.gms:play-services-maps:15.0.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'com.mikhaellopez:circularimageview:3.2.0'
implementation 'gr.pantrif:easy-android-splash-screen:0.0.1'
implementation 'com.github.GrenderG:Toasty:1.3.0'
implementation 'com.github.adrielcafe:AndroidAudioRecorder:0.3.0'
implementation 'com.google.firebase:firebase-core:16.0.1'
implementation 'com.crashlytics.sdk.android:crashlytics:2.9.5'
implementation 'com.android.volley:volley:1.1.0'
compile 'com.github.ybq:Android-SpinKit:1.1.0'
implementation 'com.google.firebase:firebase-database:16.0.1'
compile 'com.android.support:cardview-v7:28.0.0'
compile 'com.github.bumptech.glide:glide:3.6.0'
compile 'com.github.clans:fab:1.6.4'
compile 'com.github.blikoon:QRCodeScanner:0.1.2'
compile 'com.github.droidbyme:DroidDialog:c6decc7167'
implementation 'com.android.support:multidex:1.0.3'
compile project(':library')
}
apply plugin: 'com.google.gms.google-services'
apply plugin: 'io.fabric'
And this is the content of my AndroidManifest.xml
:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.sample.x">
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.VIBRATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="MY_API_KEY" />
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.com.vansuita.pickimage.provider"
android:exported="false"
android:grantUriPermissions="true"
tools:replace="android:authorities">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/picker_provider_paths"
tools:replace="android:resource" />
</provider>
<activity
android:name=".SplashscreenActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MapsMarkerActivity"
android:label="MAPS" />
<activity
android:name=".MapsActivity2"
android:label="@string/title_activity_maps2"></activity>
</application>
</manifest>
Reset only the maps/route/navigation app Access Settings in your Android smartphone or tablet. Choose Apps. In the list of apps choose the app used by default to access maps/routes/navigation (Maps for GoogleMaps, or Waze). Choose the Launch by default function.
I had this problem yesterday in designing a customer in the company. it was two crazy days to work it out with the customer behind me. What I did was:
Delete the current key (API Key) from the Google Dashboard APIs. Delete the firebase web key from the Google dashboard APIs. Create a new Key API for android, register the SHA-1 and package name. and add in project android studio;
In the FIrebase project delete the SHA-1 code to add again. Download google-services.json, and add in the project;
Generate the app in release mode, publish in the store, and download on some device, when running the app should show the Map normally;
If not, it will show you the error in LogCat, saying that you must register the following SHA-1 key: XXXXXXXXXXXXXXXXX and the package name: com.your.packagename;
Just register this key in Google APIs, and it will work in a few seconds, without even having to update the app in the store.
NOTE: Another thing, consider upgrading the dependencies of Google Maps, and Google Services.
Hope this helps.
I am assuming that this may due to mismatch SHA 1 Fingerprint. Double check that you are using the same keystore for getting SHA1.
or Let's check your API key is valid or not. For that add following MAP_API as your key
AIzaSyDztCvpv3PVBxzWwY7mWqCMnGfDeOiGxwY
add key directly to manifest
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="AIzaSyDztCvpv3PVBxzWwY7mWqCMnGfDeOiGxwY" />
Add following permission in your AndroidManifest.xml (Optional/not necessary)
<permission
android:name="your_pakage_name.permission.MAPS_RECEIVE"
android:protectionLevel="signature" />
Build your apk. And test it.
If the map is showing then we can fix that your API key is the problem.
Otherwise
Maybe due to child fragment manager, So Initialize your fragment in view pager like below. then test it
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/map"
android:name="yourpackage.MapsActivity"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" />
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With