我编写了简单的代码来返回设备的gpsLocation。 当我编译它时,我得到一个错误,我没有使用访问GPS和网络的'checkSelfPermission'。
当我进入'checkSelfPermission'代码时,我得到一个例外。
为什么我得到例外?
@TargetApi(Build.VERSION_CODES.M)
private void getLocation() {
try {
locationManager = (LocationManager)mContext.getSystemService(LOCATION_SERVICE);
// getting GPS status
isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
// getting network status
isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (isNetworkEnabled)
{
**// the exception is on the 'checkSelfPermission'**
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES,
this);
if (locationManager != null)
{
location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
if (isGPSEnabled)
{
if (location == null)
{
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES,
this);
if (locationManager != null)
{
location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null)
{
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
}
}
catch(Exception e)
{
Log.e("Error", e.getMessage());
}
}
答案 0 :(得分:2)
直接来自android文档:
从Android 6.0(API级别23)开始,用户授予权限 应用程序运行时的应用程序,而非安装应用程序时的应用程序。
系统权限分为两类,普通和 危险:
1.Normal权限不会直接影响用户的隐私。如果你的 应用程序列出其清单中的正常权限,系统授予 自动许可。
2.Dangerous权限可以给应用程序 访问用户的机密数据。
如果您的应用需要危险权限,则每次执行需要该权限的操作时,都必须检查是否拥有该权限。访问设备位置需要危险的权限,因此您必须在运行时检查并请求位置权限。
要检查您的应用是否已获得授权,您可以使用:
// Assume thisActivity is the current activity
int permissionCheck = ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.WRITE_CALENDAR);
如果应用具有权限,则该方法返回PackageManager.PERMISSION_GRANTED
,应用可以继续操作。如果应用程序没有权限,则该方法返回PERMISSION_DENIED
,应用程序必须明确要求用户许可。
所以你无法避免checkSelfPermission
。