В настоящее время я придерживаюсь этой проблемы: Google Maps, похоже, вообще не загружается. См. Изображение ниже:
Это действительно сводит меня с ума. Я уже сделал следующее:
- Добавлено мое имя пакета + SHA1 (отладочное хранилище) + SHA1 (релиз хранилища ключей) в консоли разработчика Google.
- Карты SDK для Android включены. Ключ API имеет ограничение на использование Android-приложений
- Добавлено google-services.json в мое приложение из консоли Firebase
- Добавлены необходимые разрешения:
- Добавлен ключ API в файл манифеста - из консоли разработчика Google
- Добавлены метаданные для версии gms
Это код моего фрагмента:
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));
}
}
И это код для моего макета:
<?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>
Может ли кто-нибудь сказать, что еще мне не хватает?
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/[email protected]@[email protected][email protected]@[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/[email protected]@[email protected][email protected]@[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
Обратите внимание, что когда я использую тот же API_KEY для других проектов карты, он отлично работает. Кажется, что карта не отображается в моем приложении, а работает над другими проектами.
Это мои зависимости:
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'
И это содержание моего 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>