0

我有一个自定义按钮类,我已经请求CALL_PHONE权限按钮click.Everything是好的,但我没有得到onRequestPermissionResult()的用户结果。在这里下面我张贴我的自定义按钮类。Android M Permissions: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(); 
     } 


    } 

} 
} 

在此先感谢乡亲:)

回答

1

我没有收到在onRequestPermissionResult()的用户结果

是的,你是。它会去mContext所代表的任何活动的onRequestPermissionResult()

恕我直言,你在做什么是违反分离的担忧。一些更像控制器的东西,比如活动或片段,负责检查和请求权限,而不是视图。

这就是说,如果您希望保留更多现有代码,欢迎您将活动转交给视图的onRequestPermissionResult()结果。

+0

这意味着我不能在我的自定义类中得到结果。我需要在所有使用我的自定义类的活动中实现onRequestPermissionResult。 – Arora