简体   繁体   English

Android Open Camera权限拒绝

[英]Android Open Camera Permission Denial

I want to open camera when clicking an item on my dialog box, but I get an error like below. 单击对话框上的某个项目时,我想打开相机,但是出现如下错误。 I've been adding a camera permission to manifest.xml . 我一直在向manifest.xml添加摄像机权限。

java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE cmp=com.sonyericsson.android.camera/.MultiWindowActivity } from ProcessRecord{b42fcde 29884:ukmutilizer.project.com.ukm_utilizer/u0a273} (pid=29884, uid=10273) with revoked permission android.permission.CAMERA java.lang.SecurityException:权限拒绝:启动意图{act = android.media.action.IMAGE_CAPTURE cmp = com.sonyericsson.android.camera / .MultiWindowActivity} from ProcessRecord {b42fcde 29884:ukmutilizer.project.com.ukm_utilizer / u0a273} (pid = 29884,uid = 10273),其权限已撤销android.permission.CAMERA

this is my function 这是我的职责

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.personal_data_step, container, false);
    ButterKnife.bind(this, view);

    imageEktp.setClickable(true);

    imageEktp.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //Log.d("test : ", "testing");
            CharSequence menu[] = new CharSequence[]{"Take From Galery", "Open Camera"};
            AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
            builder.setTitle("Pick a Picture");
            builder.setItems(menu, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    if(i == 0){
                        Toast.makeText(getActivity(), "galery", Toast.LENGTH_SHORT).show();
                    }else{
                        Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
                        startActivity(intent);
                    }
                }
            });
            builder.show();
        }
    });

    return view;
}

Ensure you request Runtime Camera Permission from the user. 确保从用户那里请求“运行时Camera Permission ”。

private static final int CAMERA_REQUEST_CODE = 100;

Request permission if not granted. 如果未授予请求权限。

if (checkSelfPermission(Manifest.permission.CAMERA)
                        != PackageManager.PERMISSION_GRANTED) {
       requestPermissions(new String[]{Manifest.permission.CAMERA},
                            CAMERA_REQUEST_CODE);
}

Do stuff inside onRequestPermissionsResult . onRequestPermissionsResult内部进行操作。

@Override

    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        if (requestCode == CAMERA_REQUEST_CODE) {

            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                Toast.makeText(this, "Camera permission granted.", Toast.LENGTH_LONG).show();

               // Do stuff here for Action Image Capture.

            } else {

                Toast.makeText(this, "Camera permission denied.", Toast.LENGTH_LONG).show();

            }

        }
    }

Also this should be declared inside Manifest as well. 同样,这也应该在Manifest声明。

The user has to confirm the permission request. 用户必须确认许可请求。
Try 尝试

public class ActivityMain extends AppCompatActivity
{

    public static final int MY_PERMISSIONS_REQUEST = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        if (ContextCompat.checkSelfPermission(ActivityMain.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED)
        {   ActivityCompat.requestPermissions(ActivityMain.this, new String[]{Manifest.permission.CAMERA}, MY_PERMISSIONS_REQUEST);
        }

[...]

    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults)
    {   switch (requestCode)
        {   case MY_PERMISSIONS_REQUEST:

[...]
        }
    }
}

when you run your app in 6.0 above like marshmallow device then need permission other wise no need to permission. 当您在6.0以上的版本中运行您的应用(例如棉花糖设备)时,则需要权限,否则不需要权限。 that time your code work.. 那时候你的代码工作..

if run marshmallow device that time need permission then make below code .. 如果运行棉花糖设备那时候需要权限,然后进行以下代码..

private void alertDialog(){
    CharSequence menu[] = new CharSequence[]{"Take From Galery", "Open Camera"};
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Pick a Picture");
    builder.setItems(menu, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            if(i == 0){
                Toast.makeText(getApplicationContext(), "galery", Toast.LENGTH_SHORT).show();
            }else{
                Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
                startActivity(intent);
            }
        }
    });
    builder.show();

}

then above method put in permission code like below .. 然后上述方法放入如下的许可代码..

if (ContextCompat.checkSelfPermission(webView.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
                if (ActivityCompat.shouldShowRequestPermissionRationale(webView.this, Manifest.permission.CAMERA)) {

                    alertDialog();
                }
                else{
                    ActivityCompat.requestPermissions(webView.this, new String[] { Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE }, 0);
                }
            }

add two permission into manifest file .. 在清单文件中添加两个权限。

    <uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

your error main problem is permission if you add this below line is work. 您的错误主要问题是权限,如果您在下面的行中添加此内容,则是有效的。

if (ContextCompat.checkSelfPermission(webView.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
                if (ActivityCompat.shouldShowRequestPermissionRationale(webView.this, Manifest.permission.CAMERA)) {

                    alertDialog();
                }
                else{
                    ActivityCompat.requestPermissions(webView.this, new String[] { Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE }, 0);
                }
            }

You have to get runtime permission then only access your camera 您必须先获得运行时权限,然后才能访问摄像机

like 喜欢

in manifest 在清单中

<uses-permission android:name="android.permission.CAMERA" />

in Java 在Java中

private static final int MY_CAMERA_REQUEST_CODE = 100;

     private void processPickImage() {
                if(hasCameraPermission()) {
                    pickImage();
                }
                else
                {
                    requestCameraPermission();
                }            
        }

        private boolean hasCameraPermission() {
            return ContextCompat.checkSelfPermission(context,
                    Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED;
        }

        @TargetApi(Build.VERSION_CODES.M)
        private void requestCameraPermission() {
            requestPermissions(new String[]{Manifest.permission.CAMERA},
                    MY_CAMERA_REQUEST_CODE );
        }

        @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                               @NonNull int[] grantResults) {
            switch (requestCode) {
                case MY_CAMERA_REQUEST_CODE :

                    processPickImage();
                    break;
                default:
                    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            }
        }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM