gpt4 book ai didi

java - 从 Activity 外部捕获 onRequestPermissionsResult()

转载 作者:行者123 更新时间:2023-11-29 02:25:41 25 4
gpt4 key购买 nike

我目前正在尝试学习 android 以及如何制作 android 应用程序。经过多次研究,我找不到正确处理权限的好方法。

我想要的是能够从任何 Activity 中请求权限,并检测用户是接受还是拒绝。

这是我的位置:

我有一个 MainActivity.java:

@Override
protected void onCreate(Bundle savedInstanceState) {
final Activity activity = this;
super.onCreate(savedInstanceState);

new PermissionHandler(activity).setPermissionListener(new PermissionHandler.PermissionAccordedListener() {
@Override public void permissionAccorded() {
// Permission Accorded
}
}).askForPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);

//...
}

还有一个类PermissionHandler.java

public class PermissionHandler implements  ActivityCompat.OnRequestPermissionsResultCallback {
private final Activity activity;
private final int CODE = 12;

public interface PermissionAccordedListener {
void permissionAccorded();
}

public PermissionHandler setPermissionListener(PermissionAccordedListener permissionListener) {
this.permissionAccorded = permissionListener;
return this;
}

private PermissionAccordedListener permissionAccorded;

public PermissionHandler(Activity activity) {
this.activity = activity;
}

public void askForPermission(String permission) {
checkForPermission(activity, permission);

}

private void checkForPermission(Activity activity, String permission) {
if (ContextCompat.checkSelfPermission(activity,
permission)
!= PackageManager.PERMISSION_GRANTED) {

// Permission is not granted
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(activity,
permission)) {
// Show an explanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
ActivityCompat.requestPermissions(activity,
new String[]{permission},
CODE);
} else {
// No explanation needed; request the permission
ActivityCompat.requestPermissions(activity,
new String[]{permission},
CODE);

// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.
}
} else {
if (permissionAccorded != null) {
permissionAccorded.permissionAccorded();
}
}
}

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case CODE: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
if (permissionAccorded != null) {
permissionAccorded.permissionAccorded();
}
} else {
// permission denied! Disable the
// functionality that depends on this permission.
}
return;
}

// other 'case' lines to check for other
// permissions this app might request.
}
}

}

除了永远不会触发 onRequestPermissionsResult 之外,它工作得非常好。

那么首先,这是好的方法吗?如果是,我做错了什么?如果没有,是否有此类资源?

最佳答案

您可以使用处理权限的 Dexter 库也可以处理多个权限有关详细信息,请参阅文档 https://github.com/Karumi/Dexter

关于java - 从 Activity 外部捕获 onRequestPermissionsResult(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52406798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com