[問題] google map 閃退

看板AndroidDev作者 (Run)時間9年前 (2015/06/12 20:48), 9年前編輯推噓3(307)
留言10則, 4人參與, 最新討論串1/1
求救,我耗了整整一天,快崩潰了 我用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) { } } } 拜託幫幫我,我真的快起笑了。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.115.214.222 ※ 文章網址: https://www.ptt.cc/bbs/AndroidDev/M.1434113307.A.79C.html

06/12 20:59, , 1F
Log錯誤訊息呢? 如果程式碼無誤試著更新GoogleService
06/12 20:59, 1F

06/12 21:00, , 2F
更新手機上的版本
06/12 21:00, 2F

06/12 21:20, , 3F
要看錯誤訊息啊
06/12 21:20, 3F

06/12 21:37, , 4F
我是在studio用模擬器測試,是要更新模擬器上的手機嗎?
06/12 21:37, 4F
抱歉小弟剛學兩個禮拜,log還不太會用和看 event log上什麼都沒寫,只有Gradle build finished 和 running的訊息 logcat上面有一堆紅字,不太清楚哪個是主因, 藍字 06-12 21:44:32.831 6795-6795/com.example.rum.try3 W/GooglePlayServicesUtil﹕ Google Play services out of date. Requires 7327000 but found 6774470 紅字 06-12 21:26:06.345 1620-2015/com.google.process.location E/copresGcore﹕ ObfuscatedGaiaIdLookup: Could not load ObfuscatedGaiaIds: /data/data/com.google.android.gms/files/copresence_gaia_id: open failed: ENOENT (No such file or directory) 06-12 21:26:06.347 1620-2015/com.google.process.location E/copresGcore﹕ Couldn't load settings: /data/data/com.google.android.gms/files/copresence_settings: open failed: ENOENT (No such file or directory) 06-12 21:44:33.109 6795-6795/com.example.rum.try3 E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.example.rum.try3, PID: 6795 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.rum.try3/com.example.rum.try3.MapsActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.maps.GoogleMap.setMapType(int)' on a null object reference ※ 編輯: QQron (59.115.214.222), 06/12/2015 21:47:39

06/12 21:47, , 5F
不建議用模擬器 有實機跑比較好 設定很麻煩
06/12 21:47, 5F

06/12 21:48, , 6F
我也有開模擬器想跑Map 設定不起來就放棄直接用手機了
06/12 21:48, 6F

06/12 21:52, , 7F
或許真的是模擬器手機上版本的問題,完全不知道怎更新
06/12 21:52, 7F

06/12 21:53, , 8F
好的,我先用實機看看好了
06/12 21:53, 8F

06/12 21:55, , 9F
搞定了 十分感謝 真的是模擬器版本問題 天呀我的時間.....
06/12 21:55, 9F

06/12 23:19, , 10F
我之前也搞了一兩個禮拜還沒搞好,換genymotion就解決了
06/12 23:19, 10F
文章代碼(AID): #1LUjKRUS (AndroidDev)