Java 使用摄像头时android中的权限拒绝

Java 使用摄像头时android中的权限拒绝,java,android,android-studio,android-camera,Java,Android,Android Studio,Android Camera,我是本地android开发的新手。我正在安卓工作室工作。我有一个选项卡式活动,其中我使用了两个选项卡。在一个选项卡中,有一个带有用户gps位置标记的地图。第二个选项卡是拍照,然后将其保存在操作系统提供的存储器中。为此,我遵循这一点,在我的设备上运行应用程序,但它崩溃了。我正在棉花糖上运行它。下面是我得到的错误 java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMA

我是本地android开发的新手。我正在安卓工作室工作。我有一个
选项卡式活动
,其中我使用了两个选项卡。在一个选项卡中,有一个带有用户gps位置标记的地图。第二个选项卡是拍照,然后将其保存在操作系统提供的存储器中。为此,我遵循这一点,在我的设备上运行应用程序,但它崩溃了。我正在棉花糖上运行它。下面是我得到的错误

java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE cmp=android/com.android.internal.app.ResolverActivity } from ProcessRecord{e8f9820 15070:com.example.accurat.faisal/u0a228} (pid=15070, uid=10228) with revoked permission android.permission.CAMERA
                                                                                at android.os.Parcel.readException(Parcel.java:1620)
                                                                                at android.os.Parcel.readException(Parcel.java:1573)
                                                                                at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3181)
                                                                                at android.app.Instrumentation.execStartActivity(Instrumentation.java:1541)
                                                                                at android.app.Activity.startActivityForResult(Activity.java:4298)
                                                                                at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:50)
                                                                                at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:79)
                                                                                at android.support.v4.app.ActivityCompatJB.startActivityForResult(ActivityCompatJB.java:30)
                                                                                at android.support.v4.app.ActivityCompat.startActivityForResult(ActivityCompat.java:146)
                                                                                at android.support.v4.app.FragmentActivity.startActivityFromFragment(FragmentActivity.java:937)
                                                                                at android.support.v4.app.FragmentActivity$HostCallbacks.onStartActivityFromFragment(FragmentActivity.java:1047)
                                                                                at android.support.v4.app.Fragment.startActivityForResult(Fragment.java:954)
                                                                                at android.support.v4.app.Fragment.startActivityForResult(Fragment.java:943)
                                                                                at com.example.accurat.faisal.Camera$1.onClick(Camera.java:51)
                                                                                at android.view.View.performClick(View.java:5716)
                                                                                at android.widget.TextView.performClick(TextView.java:10926)
                                                                                at android.view.View$PerformClick.run(View.java:22596)
                                                                                at android.os.Handler.handleCallback(Handler.java:739)
                                                                                at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                at android.os.Looper.loop(Looper.java:148)
                                                                                at android.app.ActivityThread.main(ActivityThread.java:7325)
                                                                                at java.lang.reflect.Method.invoke(Native Method)
                                                                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230                                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
我搜索了它,发现我应该请求它的许可,所以我遵循这一点,并试图添加许可检查,如下面所示

 button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Check permission for CAMERA
            if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA)
                    != PackageManager.PERMISSION_GRANTED) {

                // Check Permissions Now
                // Callback onRequestPermissionsResult interceptado na Activity MainActivity
                ActivityCompat.requestPermissions(getActivity(),
                        new String[]{Manifest.permission.CAMERA},
                        MainActivity.REQUEST_CAMERA);


            }

            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE );
        }
    });
但是我收到了
CAMERA
REQUEST\u CAMERA
red text
。虽然我也导入了它们,但仍然显示红色文本

import static android.Manifest.permission.CAMERA;
import static android.Manifest.permission.RECORD_AUDIO;
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
下面是我的清单文件

 <uses-permission android:name="com.example.accurat.faisal.permission.MAPS_RECEIVE"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.hardware.camera"/>

我不知道问题出在哪里,也不知道解决办法,我一直坚持下去


非常感谢您提供的任何帮助

您需要在代码中添加权限检查,并根据用户的接受或拒绝操作显示摄像头预览。此外,如果您正在创建一个文件,该文件将用作图像输入(通过摄像头捕获),则需要请求android.Manifest.permission.WRITE_EXTERNAL_STORAGE的用户权限。

您必须使用:

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

这应该是一个评论!我知道我必须添加权限检查,我正在实现它,这在我的问题中显示出来。问题是我得到了
摄像机
请求(摄像机
)@faisal1208的
红色文本
。你忘记了onclick listener中的else代码。就像字面上的字符串“红色文本”一样?尝试清理和重建。然后在设备上重新安装应用程序。@Fildor我添加了
import static android.Manifest.permission.CAMERA并且它没有显示任何红线,但是在
请求摄像头上
Ahhh,所以我猜您的主要活动中没有定义请求摄像头。。。IDE应该在那里提供一些错误文本。
@Override
public void onRequestPermissionsResult(int requestCode,
        String permissions[], int[] grantResults) {
    switch (requestCode) {
        case Manifest.permission.CAMERA: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                // permission was granted, yay! Do the
                // contacts-related task you need to do.

            } else {

                // permission denied, boo! Disable the
                // functionality that depends on this permission.
            }
            return;
        }

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