在android清单文件中,我为gps添加了以下权限以访问该位置
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Run Code Online (Sandbox Code Playgroud)
我正在使用位置管理器类来构建位置更新,如下所示
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters
private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES,
this
);
Run Code Online (Sandbox Code Playgroud)
但上面的一行是一个例外陈述
"gps" location provider requires ACCESS_FINE_LOCATION permission
Run Code Online (Sandbox Code Playgroud)
这个东西只发生在targetSDKVersion 23(即用android 6.0),我也在android 5.1中测试过,工作正常.
请帮助!!.提前致谢.
Seb*_*AND 59
从6.0开始,一些权限被认为是"危险的"(FINE_LOCATION就是其中之一).
为了保护用户,必须在运行时对其进行授权,以便用户知道它是否与其操作相关.
去做这个 :
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
Run Code Online (Sandbox Code Playgroud)
它将显示一个DialogBox,用户将在其中选择是否自动调整您的应用程序以使用位置.
然后使用此函数获取用户答案:
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case 1: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
}
return;
}
// other 'case' lines to check for other
// permissions this app might request
}
}
Run Code Online (Sandbox Code Playgroud)
如果用户接受一次,那么您的应用程序将记住它,您将不再需要发送此DialogBox.请注意,如果他决定,用户可以稍后禁用它.然后在请求位置之前,您必须测试是否仍然授予了权限:
public boolean checkLocationPermission()
{
String permission = "android.permission.ACCESS_FINE_LOCATION";
int res = this.checkCallingOrSelfPermission(permission);
return (res == PackageManager.PERMISSION_GRANTED);
}
Run Code Online (Sandbox Code Playgroud)
这些都在Android文档中进行了解释:http://developer.android.com/training/permissions/requesting.html
试试这个代码
private void marshmallowGPSPremissionCheck() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
&& getActivity().checkSelfPermission(
Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED
&& getActivity().checkSelfPermission(
Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(
new String[]{Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION},
MY_PERMISSION_LOCATION);
} else {
// gps functions.
}
}
Run Code Online (Sandbox Code Playgroud)
添加这个也..................
@Override
public void onRequestPermissionsResult(int requestCode,
String[] permissions, int[] grantResults) {
if (requestCode == MY_PERMISSION_LOCATION
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// gps functionality
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
75629 次 |
| 最近记录: |