我为我的英语道歉。
我尝试了几个小时来创建一个允许请求运行时权限的类。我认为如果您在几个不同的活动中请求了权限,那么基本系统会使代码无法读取。
所以我创建了以下类
public class PermissionsHelper {
public interface PermissionHelperListener{
void accepted();
void rejected();
}
private static PermissionsHelper mInstance;
private static AppCompatActivity mContext;
public static ArrayList<PermissionHelperListener> permissionHelperListeners;
public static PermissionsHelper getInstance(AppCompatActivity context){
mContext = context;
if(mInstance == null){
mInstance = new PermissionsHelper();
}
return mInstance;
}
public void requestPermissions(String perm, PermissionHelperListener permissionHelperListener){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (mContext.checkSelfPermission(perm) != PackageManager.PERMISSION_GRANTED) {
int index = permissionHelperListeners.size();
permissionHelperListeners.add(permissionHelperListener);
mContext.requestPermissions(new String[]{perm}, index);
}
}
}
public void requestPermissions (String[] perms, PermissionHelperListener permissionHelperListener){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int index = permissionHelperListeners.size();
permissionHelperListeners.add(permissionHelperListener);
mContext.requestPermissions(perms, index);
}
}
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
permissionHelperListeners.get(requestCode).accepted();
} else {
permissionHelperListeners.get(requestCode).rejected();
}
permissionHelperListeners.remove(requestCode);
}
}
我在onRequestPermissionsResult
这样打电话给我的班级
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
PermissionsHelper.getInstance(this).onRequestPermissionsResult(requestCode, permissions, grantResults);
}
到目前为止,一切都是正确的。但是当我在我的活动中使用requestPermissions
时,始终会有警告来检查权限。我使用@SuppressWarnings("ALL")
并且它可以工作,但我真的不喜欢它。还有另一种方法可以删除此警告或通过这样的回调询问权限吗?
非常感谢
答案 0 :(得分:0)
更新:
我找到了一个很棒的解决方案。
只需将您正在使用的方法重命名为检查帮助程序类中的权限即可检查自助权&#39;。我猜测Lint扫描这些单词的代码,以决定何时显示可怕的红色下划线。
旧答案:
另一种方法是使用带有安全性异常的try和catch块。
try {
//code with the warning goes here
} catch (SecurityException e){
//do nothing here or ask for permission and recall this method
//again if the user grants the permission
}