谷歌地图在发布模式下不工作,但在调试模式下工作正常
Posted
技术标签:
【中文标题】谷歌地图在发布模式下不工作,但在调试模式下工作正常【英文标题】:Google maps not working in release mode but working fine in debug mode 【发布时间】:2019-04-05 18:42:24 【问题描述】:Google 地图活动在发布模式下不工作,但在调试模式下工作正常。
尝试了与我的查询相关的堆栈溢出的所有内容,但它不起作用。
我还使用“keytool -list -v -keystore mystore.keystore”从 cmd 提示符复制了 SHA1 密钥并将其粘贴到谷歌控制台中,但仍然无法正常工作。
在调试模式下一切正常.. 我还授予了 android marshmallow 及更高版本的运行时权限。
注意事项: 我已经使用 mapView 代替片段.. 我也尝试过使用地图片段,但仍然是同样的问题。
activity_maps.xml
<com.google.android.gms.maps.MapView
android:id="@+id/map"
android:layout_
android:layout_ />
你可以在这里看到区别:
In debug mode, In release mode
分级:
implementation 'com.google.android.gms:play-services-maps:16.1.0'
implementation 'com.google.android.gms:play-services-location:16.0.0'
AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<permission android:name="com.example.mapsact.permission.MAPS_RECEIVE" android:protectionLevel="signature" />
<uses-permission android:name="com.example.mapsact.permission.MAPS_RECEIVE" />
MapsActivity.java
MapView mMapView;
GoogleMap mMap;
LocationManager location;
@Override
public void onResume()
super.onResume();
try
locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 20, 1, (android.location.LocationListener) this);
catch (SecurityException e)
e.printStackTrace();
mMapView.onResume();
//ActivityCompat.requestPermissions(this, new String[]Manifest.permission.ACCESS_FINE_LOCATION, 1);
@Override
public void onLocationChanged(Location location)
// Getting latitude of the current location
latitude = location.getLatitude();
// Getting longitude of the current location
longitude = location.getLongitude();
// Creating a LatLng object for the current location
LatLng latLng = new LatLng(latitude, longitude);
//now = mMap.addMarker(new MarkerOptions().position(latLng).title("Location").snippet("Current"));
// Showing the current location in Google Map
mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
mMap.animateCamera(CameraUpdateFactory.zoomTo(15.0f));
if(isNetworkConnected())
JSONObject jsonObject = new JSONObject();
try
jsonObject.put("mobile", mobile);
jsonObject.put("lati", latitude);
jsonObject.put("longi", longitude);
SendLoc sendloc = new SendLoc();
sendloc.execute(jsonObject.toString());
catch (JSONException e)
e.printStackTrace();
else
Toast.makeText(this,"No Internet Connectivity",Toast.LENGTH_LONG).show();
public void onMapReady(GoogleMap googleMap)
mMap = googleMap;
mMap.animateCamera(CameraUpdateFactory.zoomTo(15.0f));
mMap.setMyLocationEnabled(true);
【问题讨论】:
Generating Google map Release API Key的可能重复 【参考方案1】:从最近几天开始,我也面临同样的问题,我花了大约 2-3 天的时间来解决问题。您需要在 app/src/debug/res/values/google_maps_api.xml 和 app/src/release/res/values/google_maps_api.xml 中的 2 个地方添加您的 API 密钥。
您可以在项目模式下找到release/google_maps_api.xml,而不是在Android/应用程序模式下。
【讨论】:
谢谢兄弟,你拯救了我的一天。【参考方案2】:只是一个猜测,但在发布模式下,我认为您需要为地图定义的密钥来自清单
<!--
The API key for Google Maps-based APIs is defined as a
string resource.
(See the file "res/values/google_maps_api.xml").
Note that the API key is linked to the encryption key
used to sign the APK.
You need a different API key for each encryption key,
including the release key that is used to
sign the APK for publishing.
You can define the keys for the debug and release
targets in src/debug/ and src/release/.
-->
【讨论】:
以上是关于谷歌地图在发布模式下不工作,但在调试模式下工作正常的主要内容,如果未能解决你的问题,请参考以下文章