Как проверить разрешение звонка и сделать телефонные звонки внутри класса адаптера - PullRequest
0 голосов
/ 12 июня 2019

Я хочу проверить разрешение вызова и сделать телефонные звонки по нажатой кнопке, и эта кнопка обрабатывается в классе моего адаптера.Пока у меня есть это в моем классе адаптера.Какой контекст я должен поставить вместо v.getContext () для ContextCompat и ActivityCompat ?Это показывает ошибку.И куда я должен поместить метод onRequestPermissionResults () ?

call.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                BloodVaultItem bloodVaultItem = getItem(position);

                String number = bloodVaultItem.getContact();

                try {
                    if (ContextCompat.checkSelfPermission(v.getContext(),
                            Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {

                        ActivityCompat.requestPermissions(v.getContext(),
                                new String[]{Manifest.permission.CALL_PHONE}, REQUEST_CALL);
                    } else {
                        Intent intent = new Intent(Intent.ACTION_CALL);
                        intent.setData(Uri.parse("tel:" + number));
                        v.getContext().startActivity(intent);
                    }
                }
                catch (NullPointerException e){
                    e.printStackTrace();
                }
            }
        });

Попробовал приведенный ниже код внутри моего класса Activity.Получено NullPointerException - Попытка вызвать виртуальный метод 'int android.content.Context.checkPermission (java.lang.String, int, int)' на нулевой ссылке на объект

public void makephonecall()
    {
        try {
            if (ContextCompat.checkSelfPermission(BloodVaultActivity2.this,
                    Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {

                ActivityCompat.requestPermissions(BloodVaultActivity2.this,
                        new String[]{Manifest.permission.CALL_PHONE}, REQUEST_CALL);
            } else {
                Intent intent = new Intent(Intent.ACTION_CALL);
                intent.setData(Uri.parse("tel:" + number));
                startActivity(intent);
            }
        }
        catch (NullPointerException e){
            e.printStackTrace();
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

        if(requestCode == REQUEST_CALL)
        {
            if(grantResults.length>0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
            {
                makephonecall();
            }
            else
            {
                Toast.makeText(getApplicationContext(), "Permission Denied", Toast.LENGTH_SHORT).show();
            }
        }
    }

1 Ответ

0 голосов
/ 12 июня 2019

и кнопка обрабатывается внутри моего класса адаптера

Я предлагаю вам перенаправить запрос на действие или фрагмент, который отображает этот список.

Какой контекст я должен поставить вместо v.getContext () для ContextCompat и ActivityCompat?

Любой Context должен подойти для ContextCompat.checkSelfPermission(). Если вы собираетесь использовать ActivityCompat.requestPermissions(), вам необходимо передать свой Activity.

А куда мне поместить метод onRequestPermissionResults ()?

На Activity, который вы передаете в ActivityCompat.requestPermissions().

...