[问题] google map 闪退

楼主: QQron (Run)   2015-06-12 20:48:25
求救,我耗了整整一天,快崩溃了
我用studio,学教学本写了一个v2的简易范例,却总是开不起来,会直接程式停止
后来我发现可能是版本的问题
在build.gradle,把
compile 'com.android.support:appcompat-v7:22.1.1'
compile 'com.google.android.gms:play-services:7.3.0'
换回教学本上的版本
compile 'com.android.support:appcompat-v7:21.0.3'
compile 'com.google.android.gms:play-services:6.5.87'
就可以开了,可我的问题是.....不能理解为何code在新的版本上会有问题
而我想把code移植到自己写的app上,所以谁能跟我说如何修改让在新版本上执行成功
以下是java档
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.provider.Settings;
import android.support.v4.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.SupportMapFragment;
import com.google.android.gms.maps.UiSettings;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
public class MapsActivity extends FragmentActivity {
private LocationManager manager;
private LocationListener locationListener;
private GoogleMap mMap;
private Marker marker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
// 取得系统服务的LocationManager物件
manager = (LocationManager) getSystemService(LOCATION_SERVICE);
// 检查是否有启用GPS
if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
// 显示对话方块启用GPS
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("定位管理")
.setMessage("GPS目前状态是尚未启用.\n"
+"请问你是否现在就设定启用GPS?")
.setPositiveButton("启用",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 使用Intent物件启动设定程式来更改GPS设定
Intent i =
new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(i);
}
})
.setNegativeButton("不启用", null).create().show();
}
setUpMapIfNeeded(); // 初始Google Map
}
@Override
protected void onResume() {
super.onResume();
setUpMapIfNeeded();
// 建立定位服务的倾听者物件
locationListener = new GPSLocationListener();
// 更新位置频率的条件
int minTime = 1000; // 毫秒
float minDistance = 1; // 公尺
manager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
minTime, minDistance,locationListener);
manager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
minTime, minDistance,locationListener);
}
@Override
protected void onPause() {
super.onPause();
manager.removeUpdates(locationListener);
}
// 检查是否需要初始GoogleMap物件
private void setUpMapIfNeeded() {
// 检查是否尚未初始GoogleMap物件
if (mMap == null) {
// 使用SupportMapFragment取得GoogleMap物件
mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
.getMap();
mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
UiSettings mapSettings; // 使用接口的设定
mapSettings = mMap.getUiSettings();
mapSettings.setZoomControlsEnabled(true);
// 检查是否成功取得GoogleMap物件
if (mMap != null) {
// 指定浏览的经纬度座标
double lat = Double.parseDouble("25.06924");
double lng = Double.parseDouble("121.51617");
setUpMap(lat, lng); // 显示指定座标的地图
}
}
}
// 新增标记和显示指定位址附近的地图
private void setUpMap(double lat, double lng) {
LatLng pos = new LatLng(lat, lng); // 建立LatLng物件的座标
if (marker != null) {
marker.remove(); // 删除前一个Marker标记物件
}
// 新增Marker标记
marker = mMap.addMarker(new MarkerOptions()
.position(pos)
.title("Marker"));
// 显示目前位址的附近地图
CameraPosition cp = new CameraPosition.Builder()
.target(pos).zoom(18).bearing(70).tilt(25).build();
mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cp));
}
// GPS位址的倾听者物件
class GPSLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location current) {
double lat, lng;
if (current != null) {
lat = current.getLatitude();
lng = current.getLongitude();
Toast.makeText(MapsActivity.this, "经纬度座标变更....",
Toast.LENGTH_SHORT).show();
setUpMap(lat, lng);
}
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
}
拜托帮帮我,我真的快起笑了。
作者: agreerga (鸭毛)   2015-06-12 20:59:00
Log错误讯息呢? 如果程式码无误试着更新GoogleService更新手机上的版本
作者: loxyz (loxyz)   2015-06-12 21:20:00
要看错误讯息啊
楼主: QQron (Run)   2015-06-12 21:37:00
我是在studio用模拟器测试,是要更新模拟器上的手机吗?
作者: agreerga (鸭毛)   2015-06-12 21:47:00
不建议用模拟器 有实机跑比较好 设定很麻烦我也有开模拟器想跑Map 设定不起来就放弃直接用手机了
楼主: QQron (Run)   2015-06-12 21:52:00
或许真的是模拟器手机上版本的问题,完全不知道怎更新好的,我先用实机看看好了搞定了 十分感谢 真的是模拟器版本问题 天呀我的时间.....
作者: WrongHole (Woo~)   2015-06-12 23:19:00
我之前也搞了一两个礼拜还没搞好,换genymotion就解决了

Links booklink

Contact Us: admin [ a t ] ucptt.com