У меня есть один пользовательский класс кнопки, в котором я запросил разрешение CALL_PHONE при нажатии кнопки. Все в порядке, но я не получаю результат пользователя onRequestPermissionResult(). Ниже я размещаю свой собственный класс кнопок.Android M Разрешения: onRequestPermissionsResult() не вызывается в пользовательском классе кнопок
public class CustomCallExecutiveButton extends Button implements View.OnClickListener, ActivityCompat.OnRequestPermissionsResultCallback {
Context mContext;
private Button mCallButton;
private int REQUEST_CALL = 1;
public CustomCallExecutiveButton(Context context) {
super(context);
mContext = context;
init();
}
public CustomCallExecutiveButton(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
init();
}
public CustomCallExecutiveButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mContext = context;
init();
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public CustomCallExecutiveButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
mContext = context;
init();
}
private void init() {
setOnClickListener(this);
}
@Override
public void onClick(View v) {
CheckCallPermission();
}
public void CheckCallPermission() {
// Check if we have write permission
int permission = ActivityCompat.checkSelfPermission(mContext, Manifest.permission.CALL_PHONE);
if (permission != PackageManager.PERMISSION_GRANTED) {
requestCameraPermission();
} else {
intentToCall();
}
}
public void intentToCall() {
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:" + "9069118117"));
if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
return;
}
mContext.startActivity(callIntent);
}
public void requestCameraPermission() {
if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) mContext,Manifest.permission.CALL_PHONE)) {
openCallPermissionDailog();
} else {
openCallPermissionDailog();
}
}
public void openCallPermissionDailog() {
//Requesting camera and storage permission dailog
android.app.AlertDialog.Builder alert = new android.app.AlertDialog.Builder(mContext);
alert.setTitle("Permission");
alert.setMessage("Phone State Permission Needed To Make Call.");
alert.setPositiveButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
alert.setNegativeButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//when user clicks on yes onRequestPermissionResult tells whether user granted permission or not.
ActivityCompat.requestPermissions((Activity) mContext,
new String[]{Manifest.permission.CALL_PHONE},
REQUEST_CALL);
}
});
alert.show();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == REQUEST_CALL) {
if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Camera permission has been granted, preview can be displayed
intentToCall();
}
}
}
}
Заранее спасибо людям :)
Это означает, что я не могу получить результат в моем пользовательском классе. Мне нужно реализовать onRequestPermissionResult во всех действиях, в которых я использую свой собственный класс. – Arora