Проблема с кодом запроса разрешения Android

1

Как запросить разрешение? Я пытался документацию, но код запроса int int MY_PERMISSIONS_REQUEST_CALL_PHONE donst, похоже, просто работает, что-нибудь еще, чтобы иметь в виду обратную совместимость?

ActivityCompat.requestPermissions(getApplicationContext(),
                            new String[]{Manifest.permission.READ_CONTACTS},
                            MY_PERMISSIONS_REQUEST_CALL_PHONE);

Как объявить MY_PERMISSIONS_REQUEST_CALL_PHONE константу int?

Теги:
android-permissions
phone-call

4 ответа

4
Лучший ответ

Для более низких версий вам нужно объявить разрешение только в манифесте,  но для marshmellow вам нужно указать его в коде, где вы хотите выполнить код.

Здесь вы хотите позвонить. Итак, вставьте/включите код, указанный ниже, в блок кода, написанный для совершения вызова.

   public void makeCall()
   {
       Intent intent = new Intent(Intent.ACTION_CALL);
       intent.setData(Uri.parse("tel:" + "123456"));
       int result = ContextCompat.checkSelfPermission(context, Manifest.permission.CALL_PHONE);
       if (result == PackageManager.PERMISSION_GRANTED){

           startActivity(intent);

       } else {

           requestForCallPermission(); 
       }
  }

  private void requestPermission()
  {

       if (ActivityCompat.shouldShowRequestPermissionRationale(activity,Manifest.permission.CALL_PHONE))
       {
       } 
       else {

           ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.ACCESS_FINE_LOCATION},PERMISSION_REQUEST_CODE);
       }
  }

  @Override
  public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) 
  {
    switch (requestCode) {
        case PERMISSION_REQUEST_CODE:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
                makeCall(); 
            } 
            break;
      }
  }
  • 2
    Да, я это понимаю, но как это сделать? PERMISSION_REQUEST_CODE
  • 1
    Извините, я забыл сообщить вам об этом, вам нужно объявить это сверху, как показано ниже: private static final int PERMISSION_REQUEST_CODE = 1;
Показать ещё 1 комментарий
5
public void makeCall(String s)
{
    Intent intent = new Intent(Intent.ACTION_CALL);
    intent.setData(Uri.parse("tel:" + s));
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED){

        requestForCallPermission();

    } else {
        startActivity(intent);

    }
}
public void requestForCallPermission()
{

    if (ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.CALL_PHONE))
    {
    }
    else {

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

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults)
{
    switch (requestCode) {
        case PERMISSION_REQUEST_CODE:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                makeCall("100");
            }
            break;
    }
}

//Теперь вызовите метод makeCall ( "your_desire_phone_numder" ); makeCall ( "100" ); Ссылка для более подробной информации

0
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
                // TODO: Consider calling
                //    ActivityCompat#requestPermissions
                // here to request the missing permissions, and then overriding
                //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                //                                          int[] grantResults)
                // to handle the case where the user grants the permission. See the documentation
                // for ActivityCompat#requestPermissions for more details.
                return;
            }
Intent intent = new Intent(Intent.ACTION_CALL);
            intent.setData(Uri.parse("tel:" + "123456"));
            startActivity(intent);

Попробуйте сделать это.

  • 0
    Спасибо, это начало работать, я полагаю, я поставил startActivity, если раньше :)
  • 0
    Да, это была единственная проблема. Продолжай учиться. :)
0

Попробуйте ввести код, который поможет вам. Сначала это спросит вас о всплывающем окне разрешения, разрешив ему набрать номер.

if (ContextCompat.checkSelfPermission(HomePanelActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
            if (ActivityCompat.shouldShowRequestPermissionRationale(HomePanelActivity.this,
                    Manifest.permission.CALL_PHONE)) {
                ActivityCompat.requestPermissions(HomePanelActivity.this, new String[]{Manifest.permission.CALL_PHONE}, REQUEST_PERMISSION);
            }
        } else {
            Intent callIntent = new Intent(Intent.ACTION_CALL);
            callIntent.setData(Uri.parse("tel:" + phoneNumber));
            if (ActivityCompat.checkSelfPermission(HomePanelActivity.this, Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {
                startActivity(callIntent);
            }
        }

@Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch (requestCode) {
            case 10:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    Intent callIntent = new Intent(Intent.ACTION_CALL);
                    callIntent.setData(Uri.parse("tel:" + phoneNumberToCall));
                    if (ActivityCompat.checkSelfPermission(HomePanelActivity.this, Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {
                        startActivity(callIntent);
                    }
                } else {
                    Snackbar.make(drawerLayout, "You Deny permission", Snackbar.LENGTH_SHORT).show();
                return;
            }
        }
    };
  • 0
    Мне нужно Permisson при запуске и позвонить по нажатию кнопки. И мне НУЖНО разрешение, поэтому отрицание не вариант ...
  • 0
    Это реквизиты API23 мое приложение minSDK 15
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню