gpt4 book ai didi

android - 如何读取当前权限状态?

转载 作者:行者123 更新时间:2023-12-04 17:48:15 25 4
gpt4 key购买 nike

在我的应用中,我需要 GPS 来定位用户。我希望我的应用程序提供以下类型的结果。

1.The current location.(Success)
2.Failed to get current location because of device error or something else. (Failed)
3.The user refused the permission. (Permission denied)

我使用 LocationManager 来完成这项工作。

locationManager = (LocationManager)mActivity.getSystemService(Context.LOCATION_SERVICE);
Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

如果权限被拒绝,则该位置将为空。

但我不知道如果功能失败,位置会是什么。而且我不确定那个位置为空和用户拒绝打开 GPS 是否相等。

通过下面的代码,我可以知道AndroidManifest.xml中是否添加了权限。但是我无法获得我需要的信息。

boolean getLocationOn = (PackageManager.PERMISSION_GRANTED ==   
pm.checkPermission("android.permission.ACCESS_FINE_LOCATION", "my_package"));

最佳答案

使用下面的代码来检查和请求权限

private void checkAndRequestPermissions() {
int camera = ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA);
int storage = ContextCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
int loc = ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION);
int loc2 = ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION);
int logs = ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_LOGS);
int networkstate = ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_NETWORK_STATE);
int internet = ContextCompat.checkSelfPermission(this, android.Manifest.permission.INTERNET);
int wifistate = ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_WIFI_STATE);
int externalstorage = ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_EXTERNAL_STORAGE);
int phonestate = ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_PHONE_STATE);
int wakelock = ContextCompat.checkSelfPermission(this, android.Manifest.permission.WAKE_LOCK);
int alarm = ContextCompat.checkSelfPermission(this, android.Manifest.permission.SET_ALARM);
int audio = ContextCompat.checkSelfPermission(this, android.Manifest.permission.RECORD_AUDIO);
int accounts = ContextCompat.checkSelfPermission(this, android.Manifest.permission.GET_ACCOUNTS);
int contacts = ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_CONTACTS);
List<String> listPermissionsNeeded = new ArrayList<>();

if (camera != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(android.Manifest.permission.CAMERA);
}
if (storage != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
if (loc2 != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(android.Manifest.permission.ACCESS_FINE_LOCATION);
}
if (loc != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(android.Manifest.permission.ACCESS_COARSE_LOCATION);
}
if (logs != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(android.Manifest.permission.READ_LOGS);
}
if (networkstate != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(android.Manifest.permission.ACCESS_NETWORK_STATE);
}
if (internet != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(android.Manifest.permission.INTERNET);
}
if (wifistate != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(android.Manifest.permission.ACCESS_WIFI_STATE);
}
if (externalstorage != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(android.Manifest.permission.READ_EXTERNAL_STORAGE);
}
if (phonestate != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(android.Manifest.permission.READ_PHONE_STATE);
}
if (wakelock != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(android.Manifest.permission.WAKE_LOCK);
}
if (alarm != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.SET_ALARM);
}
if (audio != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(android.Manifest.permission.RECORD_AUDIO);
}
if (accounts != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(android.Manifest.permission.GET_ACCOUNTS);
}
if (contacts != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(android.Manifest.permission.READ_CONTACTS);
}
if (!listPermissionsNeeded.isEmpty()) {
ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), REQUEST_ID_MULTIPLE_PERMISSIONS);
}
}

调用 checkAndRequestPermissions() 检查并请求权限。

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
checkAndRequestPermissions();
}

关于android - 如何读取当前权限状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47278609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com