Ask permission the first time I try to make the call (Android 6+)

0

When I click on the ImageButton for the first time to perform the function of making the call, it does not do anything, I have to go to settings / applications / ... and manually activate the call permission. How could I ask permission for the first time I do the action?

I have the permission given in Manisfest:

<uses-permission android:name="android.permission.CALL_PHONE" />

MainActivity.java

package prueba.otrointento;

import android.Manifest;
import android.app.ActionBar;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.content.Intent;
import android.widget.ImageButton;

import static prueba.otrointento.R.drawable.icon_des1;

public class MainActivity extends AppCompatActivity {

    ImageButton btn1;
    ImageButton btn2;
    ImageButton btn3;
    ImageButton btn4;
    ImageButton btn5;
    ImageButton icon_des1;
    ImageButton icon_des2;
    ImageButton icon_des3;
    ImageButton icon_des4;
    ImageButton icon_des5;
    ImageButton icon_des6;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
        getSupportActionBar().setCustomView(R.layout.text_des);

        btn1 = (ImageButton) findViewById(R.id.btn1);
        btn2 = (ImageButton) findViewById(R.id.btn2);
        btn3 = (ImageButton) findViewById(R.id.btn3);
        btn4 = (ImageButton) findViewById(R.id.btn4);
        btn5 = (ImageButton) findViewById(R.id.btn5);
        icon_des1 = (ImageButton) findViewById(R.id.icon_des1);
        icon_des2 = (ImageButton) findViewById(R.id.icon_des2);
        icon_des3 = (ImageButton) findViewById(R.id.icon_des3);
        icon_des4 = (ImageButton) findViewById(R.id.icon_des4);
        icon_des5 = (ImageButton) findViewById(R.id.icon_des5);
        icon_des6 = (ImageButton) findViewById(R.id.icon_des6);

        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent boton1 = new Intent(MainActivity.this, MainActivity.class);
                startActivity(boton1);
                overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
            }
        });

        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent boton2 = new Intent(MainActivity.this, Main2Activity.class);
                startActivity(boton2);
                overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
            }
        });

        btn3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent boton3 = new Intent(MainActivity.this, Main3Activity.class);
                startActivity(boton3);
                overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
            }
        });

        btn4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent boton4 = new Intent(MainActivity.this, Main4Activity.class);
                startActivity(boton4);
                overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
            }
        });

        btn5.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent boton5 = new Intent(MainActivity.this, Main5Activity.class);
                startActivity(boton5);
                overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
            }
        });

        icon_des1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Uri uriUrl = Uri.parse("www.google.es");
                Intent intent = new Intent(Intent.ACTION_VIEW, uriUrl);
                startActivity(intent);
                overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
            }
        });

        icon_des2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Uri uriUrl = Uri.parse("www.google.es");
                Intent intent = new Intent(Intent.ACTION_VIEW, uriUrl);
                startActivity(intent);
                overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
            }
        });

        icon_des3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Uri uriUrl = Uri.parse("www.google.es");
                Intent intent = new Intent(Intent.ACTION_VIEW, uriUrl);
                startActivity(intent);
                overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
            }
        });

        icon_des4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent icon_des4 = new Intent(MainActivity.this, Main6Activity_gmail.class);
                startActivity(icon_des4);
                overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
            }
        });

        icon_des5.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(Intent.ACTION_CALL, Uri.parse("tel:0000000"));
                if(ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE)!=
                PackageManager.PERMISSION_GRANTED)
                    return;
                startActivity(i);
                overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
            }
        });

        icon_des6.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent icon_des6 = new Intent(MainActivity.this, Main6Activity_gmail.class);
                startActivity(icon_des6);
                overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
            }
        });
    }
}

I have been looking at the page for other questions on this topic, but I have not managed to get permission from you.

Thank you!

EDIT:

mainactivity.java - @Naos

public class MainActivity extends AppCompatActivity {

ImageButton btn1;
ImageButton btn2;
ImageButton btn3;
ImageButton btn4;
ImageButton btn5;
ImageButton icon_des1;
ImageButton icon_des2;
ImageButton icon_des3;
ImageButton icon_des4;
ImageButton icon_des5;
ImageButton icon_des6;

final int MY_PERMISSIONS_REQUEST_CALL_PHONE = 10;

@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) {
                // PERMISO CONCEDIDO, procede a realizar lo que tienes que hacer
                Intent i = new Intent(Intent.ACTION_CALL, Uri.parse("tel:112"));
            } else {
                // PERMISO DENEGADO
            }
            return;
        }
    }
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
    getSupportActionBar().setCustomView(R.layout.text_des);

    btn1 = (ImageButton) findViewById(R.id.btn1);
    btn2 = (ImageButton) findViewById(R.id.btn2);
    btn3 = (ImageButton) findViewById(R.id.btn3);
    btn4 = (ImageButton) findViewById(R.id.btn4);
    btn5 = (ImageButton) findViewById(R.id.btn5);
    icon_des1 = (ImageButton) findViewById(R.id.icon_des1);
    icon_des2 = (ImageButton) findViewById(R.id.icon_des2);
    icon_des3 = (ImageButton) findViewById(R.id.icon_des3);
    icon_des4 = (ImageButton) findViewById(R.id.icon_des4);
    icon_des5 = (ImageButton) findViewById(R.id.icon_des5);
    icon_des6 = (ImageButton) findViewById(R.id.icon_des6);

    btn1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent boton1 = new Intent(MainActivity.this, MainActivity.class);
            startActivity(boton1);
            overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
        }
    });

    btn2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent boton2 = new Intent(MainActivity.this, Main2Activity.class);
            startActivity(boton2);
            overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
        }
    });

    btn3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent boton3 = new Intent(MainActivity.this, Main3Activity.class);
            startActivity(boton3);
            overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
        }
    });

    btn4.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent boton4 = new Intent(MainActivity.this, Main4Activity.class);
            startActivity(boton4);
            overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
        }
    });

    btn5.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent boton5 = new Intent(MainActivity.this, Main5Activity.class);
            startActivity(boton5);
            overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
        }
    });

    icon_des1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Uri uriUrl = Uri.parse("www.google.es");
            Intent intent = new Intent(Intent.ACTION_VIEW, uriUrl);
            startActivity(intent);
            overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
        }
    });

    icon_des2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Uri uriUrl = Uri.parse("www.google.es");
            Intent intent = new Intent(Intent.ACTION_VIEW, uriUrl);
            startActivity(intent);
            overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
        }
    });

    icon_des3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Uri uriUrl = Uri.parse("www.google.es");
            Intent intent = new Intent(Intent.ACTION_VIEW, uriUrl);
            startActivity(intent);
            overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
        }
    });

    icon_des4.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent icon_des4 = new Intent(MainActivity.this, Main6Activity_gmail.class);
            startActivity(icon_des4);
            overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
        }
    });

    icon_des5.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED){
                // Aquí ya está concedido, procede a realizar lo que tienes que hacer
                Intent i = new Intent(Intent.ACTION_CALL, Uri.parse("tel:112"));
            }else{
                // Aquí lanzamos un dialog para que el usuario confirme si permite o no el realizar llamadas
                ActivityCompat.requestPermissions(MainActivity.this, new String[]{ Manifest.permission.CALL_PHONE}, MY_PERMISSIONS_REQUEST_CALL_PHONE);
            }
        }
    });

    icon_des6.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent icon_des6 = new Intent(MainActivity.this, Main6Activity_gmail.class);
            startActivity(icon_des6);
            overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
        }
    });
}

}

    
asked by UserNameYo 20.12.2016 в 02:00
source

2 answers

2

From the official documentation of android in Spanish to request permissions HERE and According to your last comment you should correct this in your code so that it asks for permission if it has not been granted:

public class MainActivity extends AppCompatActivity {

    // Aquí están tus objetos de tipo Button ... solo añade la siguiente variable después de estos

    final int MY_PERMISSIONS_REQUEST_CALL_PHONE = 10; // Puedes poner cualquier número, solo es para identificarlo

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

        icon_des5.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED){
                        // Aquí ya está concedido, procede a realizar lo que tienes que hacer
                        Intent i = new Intent(Intent.ACTION_CALL, Uri.parse("tel:0000000"));
                    }else{
                        // Aquí lanzamos un dialog para que el usuario confirme si permite o no el realizar llamadas
                        ActivityCompat.requestPermissions(MainActivity.this, new String[]{ Manifest.permission.CALL_PHONE}, MY_PERMISSIONS_REQUEST_CALL_PHONE);
                    }
                }
        });
    }

    // Y finalmente recibimos la respuesta del usuario en un método de tipo '@Override' así:

    @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) {
                    // PERMISO CONCEDIDO, procede a realizar lo que tienes que hacer
                    Intent i = new Intent(Intent.ACTION_CALL, Uri.parse("tel:0000000"));
                } else {
                    // PERMISO DENEGADO
                }
                return;
            }
        }
    }
}
    
answered by 20.12.2016 / 02:34
source
0

To require permissions for phone call on Android 6.0 or later is not done only by adding permission within from AndroidManifest.xml,

<uses-permission android:name="android.permission.CALL_PHONE" />

It must be requested in this way by requestPermissions () , this is an example:

 int permissionCheck = ContextCompat.checkSelfPermission(
            this, Manifest.permission.CALL_PHONE);
    if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
        Log.i("Mensaje", "No se tiene permiso para realizar llamadas telefónicas.");
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, 225);
    } else {
        Log.i("Mensaje", "Se tiene permiso!");
    }

You can integrate the previous script to be called when you start your application, this in your Activity that starts the application within onCreate() :

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

    int permissionCheck = ContextCompat.checkSelfPermission(
            this, Manifest.permission.CALL_PHONE);
    if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
        Log.i("Mensaje", "No se tiene permiso para realizar llamadas telefónicas.");
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, 225);
    } else {
        Log.i("Mensaje", "Se tiene permiso!");
    }

    ...
    ...
    
answered by 20.12.2016 в 02:34