onRequestPermissionsResult不会在非Activity和非Fragment类中调用

时间:2017-11-11 13:11:37

标签: android android-permissions

在我的非活动课程中,我要求获得精美的地理位置许可,但是  回调onRequestPermissionsResult“永远不会被调用”。现在我已经看到了一些与此相关的问题,但他们都认为请求是从一个Activity或片段中提出的,而不是考虑从非活动类发出请求。这是我的代码

public class Initial implements 
      ActivityCompat.OnRequestPermissionsResultCallback{

这是onRequestPermissionResultCallback方法的实现

    @Override
public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) {
    Log.i("flow", "onRequestPermissionsResult: ");
    switch (requestCode) {
        case 101: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) ==
                        PackageManager.PERMISSION_GRANTED) {

                    LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
                }
            } else {

            permissionDeniedsnackBar();
            Toast.makeText(context,"permission denied",Toast.LENGTH_SHORT).show();
                // permission denied, boo! Disable the
                // functionality that depends on this permission.
            }
            return;
        }
        //add more cases if you are making more than one permission request
    }
}

我的权限代码请求

 private void requestPermission() {
    ActivityCompat.requestPermissions((Activity) context, new String[]
     {Manifest.permission.ACCESS_FINE_LOCATION}
            , 101);

   }

这是我的构造函数

 public Initial(Activity activity) {
   Log.i("flow", "Initial: ");
     mActivity = activity;
      context = (Context) activity;

   }

我搜索了这个网站,可以找到这个特定问题的解决方案

解决 :正如一些人提到onRequestPermissionsResult方法的“活动”,我作为参数传递给ActivityCompat.requestPermissions(activity,..)方法,同时发出一个权限请求将被调用。所以我在该Activity中管理了这个onRequestPermissionsResult并且它有效。感谢

1 个答案:

答案 0 :(得分:2)

您在请求权限时传递Activity的上下文,这就是为什么将调用onRequestPermissionsResult的活动。抱歉,您将无法在您的Initial类中收到此函数回调。但是,您可以使用界面或其他内容从活动中将响应传输到此类。