Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android在活动开始时请求摄像头许可_Java_Android_Android Camera_Android Permissions - Fatal编程技术网

Java Android在活动开始时请求摄像头许可

Java Android在活动开始时请求摄像头许可,java,android,android-camera,android-permissions,Java,Android,Android Camera,Android Permissions,我需要申请相机许可,但不知何故我无法管理它 我在onCreate方法中调用了以下函数: public void checkCameraPermission() { if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new

我需要申请相机许可,但不知何故我无法管理它

我在onCreate方法中调用了以下函数:

public void checkCameraPermission() {
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, PERMISSION_CAMERA);
    }
}
但是Android Studio给了我一条消息,
无法解析符号摄像头

我还没有开始学习

在我的清单文件中,我有以下权限:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

<uses-feature android:name="android.hardware.camera2" />
<uses-feature android:name="android.hardware.camera.any" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
<uses-feature android:name="android.hardware.camera.flash" android:required="false" />
<uses-feature android:name="android.hardware.microphone" android:required="false" />

试试这两种方法

    private static final int REQUEST_PERMISSIONS_REQUEST_CODE = 34;
   /**
 * this method check permission and return current state of permission need.
 */
private boolean checkPermissions() {
    int permissionState = ActivityCompat.checkSelfPermission(this,
            Manifest.permission.CAMERA);
    return permissionState == PackageManager.PERMISSION_GRANTED;
}

/**
 * this method request to permission asked.
 */
private void requestPermissions() {
    boolean shouldProvideRationale =
            ActivityCompat.shouldShowRequestPermissionRationale(this,
                    Manifest.permission.CAMERA);

    if (shouldProvideRationale) {
        Log.i(TAG, "Displaying permission rationale to provide additional context.");
           } else {
        Log.i(TAG, "Requesting permission");
        // previously and checked "Never ask again".
        ActivityCompat.requestPermissions(MainActivity.this,
                new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                REQUEST_PERMISSIONS_REQUEST_CODE);
    }
}
那么当像这样检查的时候

  if (!checkPermissions()) {
        requestPermissions();
    }
此可变请求\权限\请求\代码访问onResult方法,如下代码所示

/**
 * Callback received when a permissions request has been completed.
 */
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                       @NonNull int[] grantResults) {
    Log.i(TAG, "onRequestPermissionResult");
    if (requestCode == REQUEST_PERMISSIONS_REQUEST_CODE) {
        if (grantResults.length <= 0) {
            // If user interaction was interrupted, the permission request is cancelled and you
            // receive empty arrays.
            Log.i(TAG, "User interaction was cancelled.");
        } else if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // Permission was granted. Kick off the process of building and connecting
            // GoogleApiClient.
            // perform your operation
        } else {
            // Permission denied.
        }
    }
}
/**
*权限请求完成时收到的回调。
*/
@凌驾
public void onRequestPermissionsResult(int-requestCode,@NonNull字符串[]权限,
@非空int[]grantResults){
Log.i(标记“onRequestPermissionResult”);
if(requestCode==请求权限请求代码){

如果(grantResults.length尝试使用下面的导入语句:-

import android.Manifest;
您可以尝试这种方法-将代码替换为以下内容:-

 int permissionCheck = Context.checkSelfPermission(getActivity(),
                        Manifest.permission.CAMERA);
                if (permissionCheck== PackageManager.PERMISSION_DENIED) {
                    requestPermissions(new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_WRITE_STORAGE);
                }
我建议使用。这就是代码的样子

RxPermissions rxPermissions = new RxPermissions(this); 
rxPermissions
    .request(Manifest.permission.CAMERA)
    .subscribe(granted -> {
        if (granted) { // Always true pre-M
           // I can control the camera now
        } else {
           // Oups permission denied
        }
    });
这看起来不是很干净很短吗!:)

梯度依赖

dependencies {
    compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.5@aar'
}

你已经清理/重建你的项目了吗?奇怪的是,它怎么找不到摄像头变量。你能添加你的build.gradle吗?@Christopher yes Updated你确定权限还没有授予吗?如果你不想每次需要请求权限时都使用长代码。只需使用无法解析Symbol REQUEST\u PERMISSIONS\u REQUEST\u code而不是REQUEST_PERMISSIONS_REQUEST_代码我在编译应用程序之后放置了摄像头,但我没有收到任何消息来激活权限Hanks我必须在oncreate方法中放置此部分的位置?`if(!checkPermissions()){requestPermissions();}`,因为我把它放在我的oncreate中,做了你更新的其他事情,但我仍然没有收到消息它不工作我没有收到任何权限请求如果你在棉花糖设备上使用,那么如果你将权限添加到android清单文件中,它肯定会请求权限。不知道为什么他们删除了此方法,并且没有在他们的文档中提到了这一点。@Jaan检查一下。这个库仍然使用旧版本的RxPermission
dependencies {
    compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.5@aar'
}