2016-02-11 89 views
0

我想通过Google地图上的位置按钮获取当前位置,但我遇到了一些问题。有了新的运行时权限(API级别23),我不知道自己做得好不好。 使用下面的代码,当我使用虚拟设备API 23时,位置按钮不会出现,并且虚拟设备API 22会显示但不会执行任何操作。那么问题是什么? 位置按钮不起作用GoogleMaps v2

 
    public class MapsActivity extends FragmentActivity implements 
     OnMapReadyCallback{

private GoogleMap mMap; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_maps); 
    // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
      .findFragmentById(R.id.map); 
    mapFragment.getMapAsync(this); 
} 

@Override 
public void onMapReady(GoogleMap map) { 
    mMap = map; 

    LatLng sydney = new LatLng(-34, 151); 
    mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney")); 
    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); 
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) 
      == PackageManager.PERMISSION_GRANTED) { 
     mMap.setMyLocationEnabled(true); 
    } else { 
     // Show rationale and request permission. 
    } 

} 

}

清单文件:提前

<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

谢谢..

回答

1

API等级23,你需要检查权限编程。您正在检查位置权限,如果它被授予,则启用位置设置。如果未获得授权,您可以申请许可。

if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) 
     == PackageManager.PERMISSION_GRANTED) { 
    mMap.setMyLocationEnabled(true); 
} else { 
    ActivityCompat.requestPermissions(MapActivity.this, 
       new String[]{Manifest.permission.ACCESS_FINE_LOCATION},REQUEST_CODE); 
} 

然后,您可以通过重写此方法来处理结果。

@Override 
public void onRequestPermissionsResult(int requestCode, 
             String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case REQUEST_CODE: { 
      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       //do something 
      } else { 
       finish(); 
      } 
      break; 
     } 
    } 
} 

此外,您还可以为您的应用程序授予模拟器设置的权限。

尝试后告诉我。祝你好运。

编辑: 你需要实现一个clicklistener到mylocation按钮。

final GoogleMap mMap = map; 
map.setOnMyLocationButtonClickListener(new GoogleMap.OnMyLocationButtonClickListener() { 
     @Override 
     public boolean onMyLocationButtonClick() { 
      LatLng loc = new LatLng(mMap.getMyLocation().getLatitude(),mMap.getMyLocation().getLongitude()); 
      mMap.moveCamera(CameraUpdateFactory.newLatLng(loc)); 
      return true; 
     } 
    }); 
+0

我的确如你所说。我允许我的立场。所以现在,出现位置按钮。但是,点击时,它什么都不会做。我想要点击时,相机会移动到我的位置。 api level 23怎么可能? 我曾经这样做过这些运行时权限之前,只有这一行“mMap.setMyLocationEnabled(true);”但我不知道它如何与这一个.. – Lankan

+1

请确保按钮可以点击。因为在我的布局中,它位于工具栏下,无法点击。当我删除它工作的工具栏。 –

+0

@ Irving-Zamora评论:在OnMyLocationButtonClickListener上,你必须返回false,这样我们才不会消耗这个事件,并且默认行为仍然存在,即(摄像机动画到用户的当前位置)。 – Mogsdad