Android 6.0.1中的位置返回0.0,但在4.0.1中有效

Android 6.0.1中的位置返回0.0,但在4.0.1中有效,android,android-6.0-marshmallow,locationmanager,Android,Android 6.0 Marshmallow,Locationmanager,我一直在寻找解决方案,并尝试了我能找到的相关解决方案,但仍然无法实现。代码的特定部分未运行。我遇到的问题是,这一切都适用于我的旧NEC地形(4.0.1,API 15),但不适用于我的新Blackberry Priv(6.0.1,API 23)。在较新的手机中,第一个错误日志“Net enabled”显示在logcat中,然后没有其他错误日志显示(我正在使用它们进行故障排除)。在旧手机中,一切正常,所有日志都会显示出来。是什么阻止了这段代码的运行?我添加了添加权限的代码,我已经在下面发布了。我的舱

我一直在寻找解决方案,并尝试了我能找到的相关解决方案,但仍然无法实现。代码的特定部分未运行。我遇到的问题是,这一切都适用于我的旧NEC地形(4.0.1,API 15),但不适用于我的新Blackberry Priv(6.0.1,API 23)。在较新的手机中,第一个错误日志“Net enabled”显示在logcat中,然后没有其他错误日志显示(我正在使用它们进行故障排除)。在旧手机中,一切正常,所有日志都会显示出来。是什么阻止了这段代码的运行?我添加了添加权限的代码,我已经在下面发布了。我的舱单中还包含以下内容:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission-sdk-23 android:name="android.permission.INTERNET" />
<uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission-sdk-23 android:name="android.permission.ACCESS_FINE_LOCATION"/>
下面是代码:

if(isNetworkEnabled){
Log.e(“标签”、“网络启用”);
if(ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS\u FINE\u LOCATION)!=PackageManager.permission\u已授予和&ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS\u LOCATION)!=PackageManager.permission\u已授予){
Log.e(“标签”、“无许可”);
}
locationManager.RequestLocationUpdate(
LocationManager.NETWORK\u提供程序,
最短时间更新,
最小距离\u更改\u用于更新,此);
如果(locationManager==null){
Log.e(“Tag”,“它是空的”);
}
如果(locationManager!=null){
location=locationManager.getLastKnownLocation(locationManager.NETWORK\u提供程序);
Log.e(“标签”、“NetLocMan OK”);
如果(位置!=null){
Log.e(“标签”、“NetLoc OK”);
纬度=位置。getLatitude();
longitude=location.getLongitude();
Log.e(“标签”,“纬度”);
Log.e(“标签”,“经度”);
}
}
}
如果(isGPSEnabled){
Log.e(“标签”、“位置”+位置);
if(位置==null){
Log.e(“标记”、“GPSLoc查找”);
locationManager.RequestLocationUpdate(
LocationManager.GPS\u提供程序,
最短时间更新,
最小距离\u更改\u用于更新,此);
Log.e(“标签”、“位置”+位置);
如果(locationManager!=null){
Log.e(“Tag”、“GPSLocMan OK”);
location=locationManager.getLastKnownLocation(locationManager.GPS\U提供程序);
Log.e(“标签”、“位置”+位置);
如果(位置!=null){
纬度=位置。getLatitude();
longitude=location.getLongitude();
Log.e(“标签”,“纬度”);
Log.e(“标签”,“经度”);
}
}
}
}
从Android 6.0(API级别23)开始,谷歌要求开发者在运行时请求潜在危险的权限:

ActivityCompat.requestPermissions(MainMenu.this, 
        Manifest.permission.ACCESS_FINE_LOCATION, 
        GET_PERMISSIONS_REQUEST_CODE
);

这将显示一个弹出窗口,请求访问用户位置的权限。您之前发出的任何位置请求都将返回空。

即使我手动授予权限,这也是真的吗?@swordguy8是的,它的实施是为了防止应用程序开发人员在没有实际“需要”的情况下将类似位置的权限“偷偷”进入他们的应用程序。太棒了!非常感谢。开始学习教程…谢谢。位置是绝对启用的。它不是在循环中运行,但我试着按下按钮多次。还打开了谷歌地图,我的位置立即完美地显示在那里。我想我找到了!在进行了更多的研究并查看了多个代码示例之后,我找到了最简单的方法。我应该在哪里发布解决方案?尽管这是一个重复的问题,但我看了原始问题,它也没有帮助我。我想帮助其他可能有这个问题的人。这是一个副本。现在我知道了,我该怎么办?删除可以接受吗?我稍微改变了一下问题,因为权限的事情不起作用(权限是在应用程序中授予的,但是没有运行的代码仍然不会运行)。从技术上讲,这仍然是一个复制品吗?
ActivityCompat.requestPermissions(MainMenu.this, 
        Manifest.permission.ACCESS_FINE_LOCATION, 
        GET_PERMISSIONS_REQUEST_CODE
);