descargar - La llamada requiere el nivel de API 23(el mínimo actual es 14): android.app.Activity#requestPermissions, checkSelfPermission
download android 6.0 marshmallow (5)
Esta pregunta ya tiene una respuesta aquí:
Estoy tratando de agregar permisos de tiempo de ejecución android (6.0.1) API 23, si uso la versión SDK (tanto la versión mínima como la final 23 ) funciona bien, como a continuación,
<uses-sdk
android:minSdkVersion="23"
android:targetSdkVersion="23" />
Si cambio android: minSdkVersion (menos de 23)
Por ejemplo:
Estoy recibiendo error a continuación:
La llamada requiere el nivel de API 23 (el min actual es 14): android.app.Activity # requestPermissions, checkSelfPermission
Para los siguientes 2 métodos,
1)requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS)
2)checkSelfPermission(permission)
Intenté ActivityCompat.checkSelfPermission()
y ContextCompat.checkSelfPermission()
ambos no funcionan.
Lo que me faltaba no pude entender ..
Compruebe el objetivo> = 23 o simplemente agregue debajo de la línea sobre su método
@TargetApi(Build.VERSION_CODES.M)
Por ejemplo, si está comprobando los permisos de almacenamiento, puede consultar esta función,
@TargetApi(Build.VERSION_CODES.M)
public boolean CheckStoragePermission() {
int permissionCheckRead = ContextCompat.checkSelfPermission(context,
Manifest.permission.READ_EXTERNAL_STORAGE);
if (permissionCheckRead != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context,
Manifest.permission.READ_EXTERNAL_STORAGE)) {
// Show an expanation to the user *asynchronously* -- don''t block
// this thread waiting for the user''s response! After the user
// sees the explanation, try again to request the permission.
ActivityCompat.requestPermissions((Activity) context,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
Define.PERMISSION_STORAGE);
} else {
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions((Activity) context,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
Define.PERMISSION_STORAGE);
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.
}
return false;
} else
return true;
}
Esto se debe a que checkSelfPermission()
se agregó en la API 23 . Así que tendrás que codificar condicionalmente como:
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
//use checkSelfPermission()
} else {
//simply use the required feature
//as the user has already granted permission to them during installation
}
Verifique el dispositivo SDK antes de llamar al permiso de solicitud.
if(Build.VERSION.SDK_INT==Build.VERSION_CODES.M)
{
//call the request permission here
}
prueba de esta manera
if (Build.VERSION.SDK_INT < 23) {
// your code
} else {
if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE)
!= PackageManager.PERMISSION_GRANTED) {
requestContactsPermissions1();
} else {
// your code
}
}
EDITADO:
Agregue el bloque de dependencias en el nivel inferior (su aplicación) build.gradle
:
compile ''com.android.support:appcompat-v7:23.1.1''
o agregue a continuación solo si necesita soporte de diseño lib
compile ''com.android.support:design:23.1.1''
usa uno de los anteriores
Compruebe los permisos:
ContextCompat.checkSelfPermission(Context context, String permission)
Solicitar permisos:
ActivityCompat.requestPermissions(Activity activity, String[] permissions, int requestCode)
o dentro de un Fragment
soporte v4
requestPermissions(String[] permissions, int requestCode)