0
ボタンのクリックに対してCALL_PHONE権限をリクエストしたカスタムボタンクラスが1つあります。すべては問題ありませんが、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