当前位置: 首页 > 知识库问答 >
问题:

onRequestPermissionsResult不在非活动和非片段类中调用

诸超
2023-03-14

在我的非活动类中,我请求了一个Fine location权限,但回调onRequestPermissionsResult“永远不会被调用”。现在我看到了一些与此相关的问题,但他们都认为请求是从活动或片段发出的,没有人考虑从非活动类发出请求。这是我的代码

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;

   }

解决了:正如一些人提到的“activity”的onRequestPermissionsResult方法,我将它作为参数传递给ActivityCompat.RequestPermissions(activity,..)方法,同时调用权限请求。因此,我在该活动本身中管理了这个onRequestPermissionsResult,它工作了。谢谢

共有1个答案

麹学文
2023-03-14

您在请求权限的同时传递了活动的上下文,这就是为什么将调用活动的onRequestPermissionsResult。很抱歉,您将无法在您的初始类中接收此函数回调。但是,您可以使用接口或其他方法将响应从活动转移到该类。

 类似资料:
  • 我有一个片段,其中我有RecolyerView和使用RecolyerView适配器在这个RecolyerView中设置数据。 现在,我在适配器的列表项中有一个按钮,单击该按钮,我需要检查android中的READ_EXTERNAL_STORAGE权限,以获取android中的新权限模型。 我在这个适配器的片段中创建了一个新函数来检查权限是否被授予,如果还没有授予,则请求权限。 我已经使用下面的代码

  • 下面的代码在活动中运行良好,但我不能使它在片段中工作。 从不调用。

  • 我有一个片段,其中有recyclerview,并使用recyclerview适配器在这个recyclerview中设置数据。 现在,我在适配器的列表项中单击了一个按钮,我需要检查android中的READ\u EXTERNAL\u STORAGE权限,以查看android中的新权限模型。 我在这个适配器的片段中创建了一个新函数,用于检查是否授予了权限,如果尚未授予权限,则请求权限。 我已经通过了我

  • 那么我应该做些什么来实现这个目标呢?如有任何帮助/线索,请提前感谢

  • 我正在尝试在启动照相机活动之前从用户处获得照相机权限。onRequestPermissionsResult在用户从权限对话框中按“允许”后不会被回调。这是我的活动课: 以下是具有摄像头权限的我的应用程序清单: 我的Gradle依赖:

  • 我已经创建了一个片段,当点击一个按钮时,会弹出一个类似对话框的ALTERVIEW。在该视图中包括谷歌登录按钮。当我连接到firebase并在startActivityForResult之后继续执行时,我需要重写onActivityResult方法。但弹出对应的类扩展了另一个对话框类,不能重写onActivityResult方法。当要重写时,它显示方法并没有从其超类错误重写方法。如何解决这个问题。以