我一直在尝试实现运行时权限。下面是它的代码片段:
RunTimePermissionsUtil。JAVA
package com.orgzit.android.util;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.v4.app.ActivityCompat;
public class RuntimePermissionsUtil {
private static boolean shouldAskPermission() {
return (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M);
}
private static boolean shouldAskPermission(Context context, String permission) {
if (shouldAskPermission()) {
int permissionGrantedResult = ActivityCompat.checkSelfPermission(context, permission);
return !(permissionGrantedResult == PackageManager.PERMISSION_GRANTED);
}
return false;
}
//TODO Karan 2018-09-20 Still need to investigate on the behaviour of storing in SharedPreferences whether I have asked for the permission before or not
public static void checkPermission(Context context, String permission, AskPermissionListener permissionListener) {
if (shouldAskPermission(context, permission)) {
if (!ActivityCompat.shouldShowRequestPermissionRationale(((Activity)context), permission)) {
permissionListener.onNeedPermission();
} else {
permissionListener.onPermissionDisabled();
}
} else {
permissionListener.onPermissionGranted();
}
}
public interface AskPermissionListener {
void onPermissionGranted();
void onNeedPermission();
void onPermissionDisabled();
}
}
在一个名为AddFileActivity的活动中,我在一个点击事件中实现了这个监听器,其代码如下:
public class AddFileActivity extends DrawerActivity {
private static final int CAMERA_REQ_CODE = 1001;
private static final int FILE_SELECT_REQ_CODE = 1002;
private Activity activity;
private RuntimePermissionsUtil.AskPermissionListener askPermissionListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
activity = this;
init();
getSupportActionBar().setTitle("Add File");
askPermissionListener = new RuntimePermissionsUtil.AskPermissionListener() {
@Override
public void onPermissionGranted() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraFileUri = getCameraFileUri();
intent.putExtra(MediaStore.EXTRA_OUTPUT, cameraFileUri);
startActivityForResult(intent, CAMERA_REQ_CODE);
}
@Override
public void onNeedPermission() {
ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.CAMERA}, CAMERA_REQ_CODE);
}
@Override
public void onPermissionDisabled() {
Toast.makeText(activity,"App does not have the permission to Open Camera :(", Toast.LENGTH_LONG).show();
}
};
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
Log.d("q","q");
}
private void init() {
showFileChooser();
}
private void showFileChooser() {
final CharSequence[] items = {"Open camera", "Select from device",
"Cancel"};
AlertDialog.Builder builder = new AlertDialog.Builder(AddFileActivity.this);
builder.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
if (items[item].equals("Open camera")) {
RuntimePermissionsUtil.checkPermission(activity, Manifest.permission.CAMERA, askPermissionListener);
Log.d("d","d");
} else if (items[item].equals("Select from device")) {
//DO SOMETHING
} else if (items[item].equals("Cancel")) {
dialog.dismiss();
}
}
});
builder.show();
}
所以,我所有的代码都会执行,它会进入onNeed权限()代码,其中,它会进入
ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.CAMERA}, CAMERA_REQ_CODE);
但是,令人惊讶的是,在此之后,没有任何对话框要求获得摄像头的运行时权限,相反,对话框关闭并再次显示活动。
有没有人能帮我解决这个问题,或者指出一个克服它的方法
权限请求对话框未出现的原因有:
在所有情况下,都会立即调用onRequestPermissionsResult()
,而不显示对话框。检查它是否被调用,并检查结果。
与其编写自己的实用程序类,我建议您看看我的库:https://github.com/nabinbhandari/Android-Permissions
HttpURLConnection使我的应用程序崩溃,因为即使我在清单文件中使用标记,也没有授予internet权限
我再一次需要你的帮助堆叠天花! 我一直在开发SDK,现在需要验证用户是否授予了位置或文件写入等权限。 验证是可以的,但是我想如果需要的话,我应该请求许可。问题是,我绝对不能访问任何活动。我可以使用appContext来检查权限,但是我不能像这样监听onRequest estPermissionsResult。 有没有一种聪明的方法可以向我这边请求许可,或者我应该让使用我的SDK的开发人员及时请求许
首先,我知道这是一个重复的问题,但我已经看过了其他类似问题的答案,没有找到成功的解决方案。 我已经开发了一款应用程序,可以在我的测试设备上完美运行,这是一款运行Android L(5.0.1)的三星S4。不过,我希望这款应用程序也能在较新版本的Android上运行。 我知道Android M的请求权限已更改,因此必须在运行时请求权限,但当我尝试实现此功能时,对话框从未出现,因此从未请求所需的权限。
CodenameOne的似乎可以很好地使用Android TargetSDKVersion21权限。但在23号,它错误地要求一个 允许[...]访问设备上的照片、媒体和文件? 权限,但由于丢失而失败。 (没有摄像头的模拟器请求媒体文件--会不会有什么东西搞混了?) 更新(DDMS输出) (settingsform.java:98)
问题内容: 嗨,我正在更新我的应用程序贾夫纳神庙。使其可以支持Android M设备(v 6.0及更高版本)。 有没有一种方法可以一次请求多个权限。例如:我想获得同时读取手机状态和位置信息的权限。 通过这种方式,我可以一一请求权限。但是我想在应用程序启动时立即放下两个权限。 请给我一些建议。Tnx。 问题答案: 有没有办法我可以一次请求多个权限 在您要传递给的许可中放置多个权限。 例如,在这个示例
是否可以在同一个对话框中同时请求多个权限,比如读联系人、读短信和写外部存储? 如果是,如何做到?请提供一个例子。 我已经在网上搜索了几个小时,但找不到方法。请帮忙!