Я хочу проверить разрешение вызова и сделать телефонные звонки по нажатой кнопке, и эта кнопка обрабатывается в классе моего адаптера.Пока у меня есть это в моем классе адаптера.Какой контекст я должен поставить вместо 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();
}
}
}