Permisos para realizar llamadas compatible con Android 6.0 y versiones anteriores

publicado por: Anonymous

En mi app, estoy creando una Activity con varios TextView que recoge la información de una base de datos en SQLite integrada en mi app, y uno de los datos, es el teléfono.

Mi intención con este dato, era poder crear un botón en la misma Activity, que al pulsarlo, realizara la llamada al teléfono del registro de la BD que se esta mostrado en pantalla, pero me he topado con que para cada versión de Android se realiza de una forma, por ejemplo:

Para Android 5.0:

Intent intent = new Intent(Intent.ACTION_CALL);         
intent.setPackage("com.android.phone");
intent.setData(Uri.parse("tel:" + number));
context.startActivity(intent);

Pero para Android 6.0 no tengo ni idea de como hacerlo y claro, no solo tiene que ser para la ultima versión, si no que tiene que ser compatible con las demás.

Mi pregunta es:

¿Cómo creo un permiso para poder realizar llamadas compatible con Android 6.0 y anteriores?

Espero que me podáis echar una mano y un ejemplo. 🙂

Gracias a todos de antemano.

solución

Yo te dejo el ejemplo del link developer.android.com/training/permissions/requesting.html que lo acabo de hacer aprovechando que yo también lo tendré que implementar.

Pedir permisos solo a partir de 6.0:

final int MY_PERMISSIONS_REQUEST_CALL_PHONE = 0;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    if (ContextCompat.checkSelfPermission(this,
            Manifest.permission.CALL_PHONE)
            != PackageManager.PERMISSION_GRANTED) {
        if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                Manifest.permission.CALL_PHONE)) {

        } else {
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.CALL_PHONE},
                    MY_PERMISSIONS_REQUEST_CALL_PHONE);
        }
    }
} 

Recibir la respuesta del usuario:

@Override
public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_CALL_PHONE: {
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                callPhone();
            } else {
                System.out.println("El usuario ha rechazado el permiso");
            }
            return;
        }
    }
}

public void callPhone() {
    Intent intent = new Intent(Intent.ACTION_CALL);
    intent.setPackage("com.android.phone");
    intent.setData(Uri.parse("tel:" + number));
    context.startActivity(intent);
}

Lo probé y va bien de todas formas ahora también probaré el ejemplo de @Elenasys.
Un saludo.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *