Если ваше целевое устройство API is <22
, вам не нужно запрашивать разрешение, поскольку разрешение будет предоставлено автоматически. Но как разработчик вы должны быть готовы ко всем возможностям. в случае, если целевое устройство API is >=23
, вам нужно вручную запросить разрешение. Для получения дополнительной информации об этом Прочтите this
public void redirectcall(View v) {
String number = (((EditText) findViewById(R.id.mobnumber)).getText()).toString();
Toast t = null;
//t.makeText(getApplicationContext(),number,Toast.LENGTH_SHORT).show();
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:" + number));
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
t.makeText(getApplicationContext(),"Hello",Toast.LENGTH_SHORT).show();
grantPermission();
return;
}
startActivity(callIntent);
}
private void grantPermission() {
// show your dialog box to ask for permission
new AlertDialog.Builder(this)
.setTitle("Call Permission Required")
.setMessage("This App needs Call permission, to function properly")
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "Permission Denied", Toast.LENGTH_SHORT)
.show();
}
})
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//here permission will be given
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, 3); // 3 is requestCode and can be any number
}
})
.create()
.show();
}
После отправки запроса мы вызовем метод @Override onRequestPermissionsResult()
для обработки сценария отклоненного или принятого запроса
*@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode){
case 3: //remember that 3 is the same number which we specified while requesting
{
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// Call-related task you need to do.
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.CALL_PHONE)
== PackageManager.PERMISSION_GRANTED) {
redirectcall();
}
}else{
// permission denied, boo! Disable the
// functionality that depends on this permission.
Toast.makeText(this, "permission denied", Toast.LENGTH_LONG).show();
}
}
}
}*
Full MainActivity. java код здесь: https://gist.github.com/Shoaibpython/eda5394ee4bc441396d68d5ef603cd3
Пожалуйста, ответьте здесь, если вы заметили какую-либо ошибку.