Can';在android api23上不打开位置?
我使用了下面的代码,请求许可的对话如预期的那样显示。但当我点击“允许”时,它什么也不做。日志消息不会显示为未授予权限,因此我转到参数以验证位置是否为“开”和“关”。难道不是因为我授予应用程序访问我所在位置的权限才应该打开它吗? 如果我手动将其“打开”,然后再次运行该应用程序,一旦它请求我的许可,它就会工作并显示日志消息,但如果用户单击“允许”,请求权限(通过对话)以打开位置(当它关闭时)并不是全部目的吗? 我做错什么了吗?我应该提到我正在api23上运行应用程序 是myOncreate中的代码:Can';在android api23上不打开位置?,android,google-api,geolocation,android-permissions,runtime-permissions,Android,Google Api,Geolocation,Android Permissions,Runtime Permissions,我使用了下面的代码,请求许可的对话如预期的那样显示。但当我点击“允许”时,它什么也不做。日志消息不会显示为未授予权限,因此我转到参数以验证位置是否为“开”和“关”。难道不是因为我授予应用程序访问我所在位置的权限才应该打开它吗? 如果我手动将其“打开”,然后再次运行该应用程序,一旦它请求我的许可,它就会工作并显示日志消息,但如果用户单击“允许”,请求权限(通过对话)以打开位置(当它关闭时)并不是全部目的吗? 我做错什么了吗?我应该提到我正在api23上运行应用程序 是myOncreate中的代码:
mApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
mApiClient.connect();
// Create the LocationRequest object
mLocationRequest = LocationRequest.create()
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
.setInterval(10 * 1000) // 10 seconds, in milliseconds
.setFastestInterval(1 * 1000); // 1 second, in milliseconds
这是我的连接的方法:
public void onConnected(@Nullable Bundle bundle) {
//start the service
//checking and asking for permission
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
MY_PERMISSION_ACCESS_FINE_LOCATION);
}
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
Location location = LocationServices.FusedLocationApi.getLastLocation(mApiClient);
if (location == null) {
LocationServices.FusedLocationApi.requestLocationUpdates(mApiClient, mLocationRequest, this);
} else {
//If everything went fine lets get latitude and longitude
currentLatitude = location.getLatitude();
currentLongitude = location.getLongitude();
Log.v("currentLatitude",currentLatitude + " WORKS " + currentLongitude + "");
}
}
您可能必须在build.gradle中添加依赖项:
compile'com.google.android.gms:play services位置:10.0.1
尝试以下代码:
private LocationCoord gps = null;
private static final int PERMISSION_REQUEST_CODE = 1;
在OnCreate()中:
您需要对Manifest.xml具有以下权限:
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
您可以在此处获取LoocationCord.java:应用程序权限与位置设置完全不同。有关提示用户启用位置模式的信息,请参见此处:
@Override
protected void onStart() {
super.onStart();
// permission android 6.0
if (!checkPermission()) {
requestPermission();
}
}
private boolean checkPermission(){
int result = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION);
if (result == PackageManager.PERMISSION_GRANTED) return true;
else return false;
}
private void requestPermission(){
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSION_REQUEST_CODE);
}
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />