android - 检查 Android 位置管理器的权限
问题描述
这是我的代码
package com.example.decimateglitchlocation;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.widget.TextView;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.Manifest;
import android.widget.Toast;
import android.content.pm.PackageManager;
import android.util.Log;
public class MainActivity extends Activity implements LocationListener {
protected LocationManager locationManager;
protected LocationListener locationListener;
protected Context context;
TextView txtLat;
String lat;
String provider;
protected String latitude, longitude;
protected boolean gps_enabled, network_enabled;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtLat = (TextView) findViewById(R.id.textview1);
if (ContextCompat.checkSelfPermission(this,
android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
|| ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
try{
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
} catch (SecurityException securityException) {
txtLat.setText("Error");
}
}//end of if
else{txtLat.setText("Error2");}
}
@Override
public void onLocationChanged(Location location) {
txtLat = (TextView) findViewById(R.id.textview1);
txtLat.setText("Latitude:" + location.getLatitude() + ", Longitude:" + location.getLongitude());
}
@Override
public void onProviderDisabled(String provider) {
Log.d("Latitude", "disable");
}
@Override
public void onProviderEnabled(String provider) {
Log.d("Latitude", "enable");
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
Log.d("Latitude", "status");
}
}
我在清单中使用正确的权限粗略位置、精细位置和互联网。它仍然显示错误 2,并且检查权限是奇怪的行为。如果可以的话,请帮助解决这个问题。
我一遍又一遍地检查了android开发人员和堆栈溢出,检查权限似乎不是直截了当的。我可能不只是了解它的要点。
谢谢,
真挚地
肖恩
解决方案
从 Android M 开始,仅在清单中声明权限是不够的。您必须实施权限模型才能成功获得授予的权限。
查看您的代码,您缺少权限请求。遵循这个官方的诡计并实施权限模型以获得预期的结果。
ActivityCompat.requestPermissions(thisActivity,
new String[] {Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION},
MY_PERMISSIONS_REQUEST_LOCATION);
检查结果如下:
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_LOCATION: {
//pare grantResults
return;
}
}
}
推荐阅读
- python - 为什么看不到回归线?
- javascript - 正则表达式从Nodejs中的`({#word#})`获取字符串'word'
- apache-spark - DataFrame 和 DataSet - 将值转换为
一对 - regex - Htaccess + regex - 服务器返回 500 内部服务器错误
- mule - 关于通过 dataweave 2.0 添加有效载荷元素
- java - java中的控制台是什么?
- git - Git合并两个不同的历史
- javascript - if 语句在我的 JS 蛇游戏中不起作用
- swift - 设置图像时不显示默认图像
- asp.net - 执行 SQL 代码以优化数据库时,Hangfire 导致超时过期异常 - ASP.NET Core