ナビゲーション・ドロワー上のマップ・フラグメントを使用している古いアプリケーションを開発し始めました。それはOKを動作するために使用されましたが、今、新しいpermissonの事で、私はいくつかのエラーを取得します。私はSOと一般的にインターネットで検索しましたが、私は何が欠けているのか分かりません。マイマップの断片は、私はマップを取得するためにgoogleMap = mMapView.getMap();
を使用しますが、私はOnMapReadyCallback
を実装することによりmMapView.getMapAsync(this);
でそれを変更して、それが私はそれがonCreateView
異なっているか知らないonMapReady
方法を、作成するために私を余儀なくさAndroid:ナビゲーション・ドロワーの地図断片とエラー・チェック
public class Fragment_maps extends android.support.v4.app.Fragment implements OnMapLongClickListener, OnMapClickListener, OnMapReadyCallback {
MapView mMapView;
GoogleMap googleMap;
@Override
public void onMapReady(GoogleMap googleMap) {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// inflate and return the layout
View v = inflater.inflate(R.layout.fragment_maps, container, false);
mMapView = (MapView) v.findViewById(R.id.map);
mMapView.onCreate(savedInstanceState);
//activate menu button
setHasOptionsMenu(true);
mMapView.onResume();// needed to get the map to display immediately
try {
MapsInitializer.initialize(getActivity().getApplicationContext());
} catch (Exception e) {
e.printStackTrace();
}
//get the map
mMapView.getMapAsync(this);
// Detect location
googleMap.setMyLocationEnabled(true);
googleMap.getUiSettings().setMyLocationButtonEnabled(false);
//googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
// Turns traffic layer on
googleMap.setTrafficEnabled(true);
// Enables indoor maps
googleMap.setIndoorEnabled(true);
// Enables indoor maps
googleMap.setIndoorEnabled(true);
// Turns on 3D buildings
googleMap.setBuildingsEnabled(true);
// Show Zoom buttons
googleMap.getUiSettings().setZoomControlsEnabled(true);
// latitude and longitude
double latitude = 40.639350;
double longitude = 22.944607;
googleMap.setOnMapLongClickListener(this);
googleMap.setOnMapClickListener(this);
// create marker
MarkerOptions thessaloniki = new MarkerOptions().position(new LatLng(latitude, longitude)).title("Thessaloniki");
// Changing marker icon
thessaloniki.icon(BitmapDescriptorFactory .defaultMarker(BitmapDescriptorFactory.HUE_ROSE));
// adding marker
googleMap.addMarker(thessaloniki);
CameraPosition cameraPositionThess = new CameraPosition.Builder() .target(new LatLng(40.639350, 22.944607)).zoom(12).build();
googleMap.animateCamera(CameraUpdateFactory .newCameraPosition(cameraPositionThess));
// Perform any camera updates here
return v;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.fragment_maps, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Log.d("onOptionsItemSelected","yes");
switch (item.getItemId()) {
case R.id.HYBRID:
googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
return true;
case R.id.SATELLITE:
googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
return true;
case R.id.TERRAIN:
googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
return true;
case R.id.NORMAL:
googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onMapClick(LatLng point) {
Toast.makeText(getActivity(),point.toString(),Toast.LENGTH_SHORT).show();
googleMap.animateCamera(CameraUpdateFactory.newLatLng(point));
}
@Override
public void onMapLongClick(LatLng point) {
if (SelectUserActivity.flagOwner){
googleMap.addMarker(new MarkerOptions()
.position(point)
.title(MainActivity.onomaxarth)
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
Toast.makeText(getActivity(),"Hotel pinned at: "+point.toString(),Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(getActivity(),point.toString(),Toast.LENGTH_SHORT).show();
}
}
@Override
public void onResume() {
super.onResume();
mMapView.onResume();
}
@Override
public void onPause() {
super.onPause();
mMapView.onPause();
}
@Override
public void onDestroy() {
super.onDestroy();
mMapView.onDestroy();
}
@Override
public void onLowMemory() {
super.onLowMemory();
mMapView.onLowMemory();
}
を下回っています私はそれを空のままにする方法。
許可のためにgoogleMap.setMyLocationEnabled(true);
にエラーが発生し、私のアプリケーションをデバッグするときにgoogleMapオブジェクトがnullになりました。 私はそれを実行すると、マップフラグメントを選択すると、アプリケーションがクラッシュし、フラグメントを保持するアクティビティが終了します。マニフェストで
私は
android:minSdkVersion="17"
android:targetSdkVersion="23"
を持っていると私のGradleの依存関係は、私がここで何を
compile 'com.android.support:support-v4:24.2.1'
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.google.android.gms:play-services:+'
をしないのですされていますか?フラグメントのパーミッションを使用するにはどうすればよいですか、googleMapが空である理由を教えてください。あなたのonCreateView
からごonMapReady
へ
マップフラグメントを選択するとき、私は再びこのしかし、アプリのクラッシュをした:あなたは
private GoogleMap googleMap;
を定義している場合また、あなたはあなたの
onMapReady
メソッドの先頭にこれを追加することになるでしょう。私はまだ 'googleMap.setMyLocationEnabled(true);のパーミッションチェックの下線を受け取ります。 – Kzaf' googleMap.setMyLocationEnabled(true);をコメントアウトすることによって、マップフラグメントを実行することができますが、今は空のマップが得られます。私が再び 'googleMap.setMyLocationEnabled(true);を使うと、私のアプリがクラッシュします。許可チェックと空白地図を修正するにはどうすればよいですか? – Kzaf