Android 我的代码未显示我的当前位置';谷歌地图中的s标记,使用棉花糖,它只是显示谷歌地图

Android 我的代码未显示我的当前位置';谷歌地图中的s标记,使用棉花糖,它只是显示谷歌地图,android,google-maps,android-studio,google-maps-api-3,Android,Google Maps,Android Studio,Google Maps Api 3,我的代码不是在谷歌地图上显示我现在所在位置的标记,而是用棉花糖显示谷歌地图 package com.example.charan.testing2; import android.Manifest; import android.content.Intent; import android.content.pm.PackageManager; import android.location.Criteria; import android.loca

我的代码不是在谷歌地图上显示我现在所在位置的标记,而是用棉花糖显示谷歌地图

    package com.example.charan.testing2;
    import android.Manifest;
    import android.content.Intent;
    import android.content.pm.PackageManager;
    import android.location.Criteria;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.LocationManager;
    import android.os.Build;
    import android.os.PersistableBundle;
    import android.support.v4.app.ActivityCompat;
    import android.support.v4.app.FragmentActivity;
    import android.os.Bundle;
    import android.support.v4.content.ContextCompat;
    import android.view.View;
    import android.widget.TextView;

    import com.google.android.gms.common.ConnectionResult;
    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.OnMapReadyCallback;
    import com.google.android.gms.maps.SupportMapFragment;
    import com.google.android.gms.maps.model.LatLng;
    import com.google.android.gms.maps.model.MarkerOptions;

    public class MainActivity extends FragmentActivity implements OnMapReadyCallback,LocationListener {

    private GoogleMap mMap;
    private double latitude ;
    private double longitude ;
    private static final int MY_PERMISSION_ACCESS_COARSE_LOCATION = 11;
    private static final int MY_PERMISSION_ACCESS_FINE_LOCATION = 12;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (!isGooglePlayServicesAvailable()) {
            finish();
        }
        setContentView(R.layout.activity_main);

        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.googleMap);
        mapFragment.getMapAsync(this);
        mMap.setMyLocationEnabled(true);

        LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
        Criteria criteria = new Criteria();
        String bestProvider = locationManager.getBestProvider(criteria, true);


    //requesting permissions
        if ( Build.VERSION.SDK_INT >= 23 &&
                ContextCompat.checkSelfPermission( this, android.Manifest.permission.ACCESS_FINE_LOCATION ) != PackageManager.PERMISSION_GRANTED &&
                ContextCompat.checkSelfPermission( this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return  ;
        }
        if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_COARSE_LOCATION)
                != PackageManager.PERMISSION_GRANTED) {


            if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                    Manifest.permission.ACCESS_COARSE_LOCATION)) {



            } else {



                ActivityCompat.requestPermissions(this,
                        new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},
                        MY_PERMISSION_ACCESS_COARSE_LOCATION);

            }
        }
        if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED) {


            if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                    Manifest.permission.ACCESS_FINE_LOCATION)) {


            } else {

                // No explanation needed, we can request the permission.

                ActivityCompat.requestPermissions(this,
                        new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                        MY_PERMISSION_ACCESS_FINE_LOCATION);


            }
        }

        Location location = locationManager.getLastKnownLocation(bestProvider);
        if(location!=null)
            onLocationChanged(location);
        else finish();

        locationManager.requestLocationUpdates(bestProvider, 20000, 0, this);

    }


   //getmapasync's method
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

    }

//requestlocationupdate's methods

    @Override
    public void onLocationChanged(Location location) {
        TextView locationTv = (TextView) findViewById(R.id.latlongLocation);
        latitude = location.getLatitude();
        longitude = location.getLongitude();
        LatLng latLng = new LatLng(latitude, longitude);
        if (mMap != null) {
            mMap.addMarker(new MarkerOptions().position(latLng).title("You are here"));
            mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
            mMap.animateCamera(CameraUpdateFactory.zoomTo(15));
            locationTv.setText(getString(R.string.welcome_messages, latitude,longitude));
        }
    }
    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub
    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub
    }

    //checking availability of google play services

    private boolean isGooglePlayServicesAvailable() {
        GoogleApiAvailability googleAPI = GoogleApiAvailability.getInstance();
        int status = googleAPI.isGooglePlayServicesAvailable(this);

        if (ConnectionResult.SUCCESS == status) {
            return true;
        } else {
            if (googleAPI.isUserResolvableError(status)) {
                googleAPI.getErrorDialog(this, status, 0).show();
            }

            return false;
        }

    }
    }

使用
CameraPosition

    CameraPosition cameraPosition = new CameraPosition.Builder().target(
            new LatLng(latLng)).zoom(15).build();

    mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));

您是否在marshamallow下面尝试过?原因:java.lang.NullPointerException:尝试在com.example.charan.testing2.MainActivity.onCreate上的空对象引用上调用虚拟方法“void com.google.android.gms.maps.GoogleMap.setMyLocationEnabled(boolean)”(MainActivity.java:49)此错误与
CameraPosition
无关
GoogleMap mMap
似乎为空。即使Google Play服务不可用/未安装,也可能发生此错误。E/Surface:getSlotFromBufferLocked:unknown buffer:在运行时发生此错误w/ViewRootImpl:由于没有窗口焦点而取消事件:MotionEvent{action=action\u CANCEL,actionButton=0,id[0]=0,x[0]=673.58276,y[0]=1699.8047,toolType[0]=TOOL\u TYPE\u FINGER,buttonState=0,metaState=0,flags=0x0,edgeFlags=0x0,pointerCount=1,historySize=0,eventTime=6363631,down=58799,deviceId=0,source=0x1002}…获取上述错误下面的消息