gpt4 book ai didi

java - 询问倍数权限android 6.0

转载 作者:行者123 更新时间:2023-11-30 10:16:37 25 4
gpt4 key购买 nike

我必须显示多个权限,我的程序只显示第一个我不知道为什么,我希望你能帮助我

进口

import static android.Manifest.permission.CHANGE_CONFIGURATION;
import static android.Manifest.permission.MODIFY_AUDIO_SETTINGS;
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
import static android.Manifest.permission.WRITE_SETTINGS;

主要

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Permis();
}

函数权限

private void Permis() {

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if ((checkSelfPermission(WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) &&
(checkSelfPermission(CHANGE_CONFIGURATION) == PackageManager.PERMISSION_GRANTED) &&
(checkSelfPermission(MODIFY_AUDIO_SETTINGS) == PackageManager.PERMISSION_GRANTED) &&
(checkSelfPermission(WRITE_SETTINGS) == PackageManager.PERMISSION_GRANTED)) {

Toast.makeText(tuneActivity.this, "Permiso concedido anteriormente", Toast.LENGTH_SHORT).show();
}

if ((shouldShowRequestPermissionRationale(WRITE_EXTERNAL_STORAGE))||
(shouldShowRequestPermissionRationale(CHANGE_CONFIGURATION)) ||
(shouldShowRequestPermissionRationale(MODIFY_AUDIO_SETTINGS)) ||
(shouldShowRequestPermissionRationale(WRITE_SETTINGS))) {

DialogoAlerta();

} else {
requestPermissions(new String[]{WRITE_EXTERNAL_STORAGE, CHANGE_CONFIGURATION, MODIFY_AUDIO_SETTINGS, WRITE_SETTINGS},
MY_PERMISSIONS_REQUEST);
}
}
}

DialogAlerta 函数

private void DialogoAlerta() {

AlertDialog.Builder dialogo=new AlertDialog.Builder(tuneActivity.this);
dialogo.setTitle("Permisos desactivados");
dialogo.setMessage("Debe aceptar los permisos para poder definir un tono como ringtone o sonido de notificacion");
dialogo.setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialogInterface, int i) {

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{WRITE_EXTERNAL_STORAGE, CHANGE_CONFIGURATION, MODIFY_AUDIO_SETTINGS, WRITE_SETTINGS},
MY_PERMISSIONS_REQUEST);
}
}

});
}

onRequestPermissionsResult

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode,permissions,grantResults);
switch (requestCode) {
case MY_PERMISSIONS_REQUEST: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] ==
PackageManager.PERMISSION_GRANTED && grantResults[1] ==
PackageManager.PERMISSION_GRANTED && grantResults[2] ==
PackageManager.PERMISSION_GRANTED && grantResults[3] ==
PackageManager.PERMISSION_GRANTED ) {
Toast.makeText (tuneActivity.this,"Permiso concedido",Toast.LENGTH_SHORT).show();
} else {
Toast.makeText (tuneActivity.this,"Permiso no concedido",Toast.LENGTH_SHORT).show();
}
return;
}
}

所以..程序只要求第一个权限'Write External Storage'然后它显示'permiso no concedido'但我不知道为什么,我希望你能解释我为什么,谢谢并且抱歉我的英语不好

最佳答案

只有保护级别为dangerous的权限才需要权限请求.可以引用这个document来确定保护级别。引用这个permission overview document了解更多详情。

MODIFY_AUDIO_SETTINGS

您看不到对此的权限请求,因为此权限的保护级别为 normal .此权限将自动授予,无需向用户请求。

WRITE_SETTINGS

您没有看到权限请求,因为保护级别为 signature .基于documentation :

Note: If the app targets API level 23 or higher, the app user must explicitly grant this permission to the app through a permission management screen. The app requests the user's approval by sending an intent with action ACTION_MANAGE_WRITE_SETTINGS. The app can check whether it has this authorization by calling Settings.System.canWrite().

您需要触发 intent 才能请求此权限。

CHANGE_CONFIGURATION

此权限要求应用程序由固件签名 key 签名或安装在系统分区上。所以你不能通过权限对话框请求这个权限。引用这个SO

然而,有一种解决方法可以通过 adb 授予此权限如下:

adb -d shell pm grant <your package name> android.permission.CHANGE_CONFIGURATION

但您不能指望所有用户都具备执行此操作的技术知识。

关于java - 询问倍数权限android 6.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49991290/

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