onRequestPermissionsResult 不会在非 Activity 和非片段 class 中被调用
onRequestPermissionsResult does not get called in a non-Activity and non-Fragment class
在我的非 Activity class 中,我请求了精细位置许可,但是
回调 onRequestPermissionsResult "never gets called" 。现在我看到了一些与此相关的问题,但他们都认为请求是从 Activity 或片段发出的,他们中没有人考虑从非 activity class。这是我的代码
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,..) 方法。所以我在 Activity 本身管理这个 onRequestPermissionsResult 并且它有效。谢谢
您在请求权限时传递了 Activity 的上下文,这就是将调用 activity 的 onRequestPermissionsResult 的原因。抱歉,您将无法在您的首字母 class 中收到此函数回调。但是,您可以使用接口或其他方式从 activity 传输对此 class 的响应。
在我的非 Activity class 中,我请求了精细位置许可,但是 回调 onRequestPermissionsResult "never gets called" 。现在我看到了一些与此相关的问题,但他们都认为请求是从 Activity 或片段发出的,他们中没有人考虑从非 activity class。这是我的代码
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,..) 方法。所以我在 Activity 本身管理这个 onRequestPermissionsResult 并且它有效。谢谢
您在请求权限时传递了 Activity 的上下文,这就是将调用 activity 的 onRequestPermissionsResult 的原因。抱歉,您将无法在您的首字母 class 中收到此函数回调。但是,您可以使用接口或其他方式从 activity 传输对此 class 的响应。