Android 不同SDK的摄像头权限

Android 不同SDK的摄像头权限,android,camera,android-permissions,Android,Camera,Android Permissions,我正在尝试创建一个应用程序,捕获一些图像,然后通过电子邮件发送。 我的问题是: 我需要为每个API创建不同的代码来访问摄像头和外部存储吗 因为我已经创建了这段代码,并且在我的手机上运行良好(API 22): 在这段代码中,我试图将捕获的图像保存在takenPicture文件中,并保存在设备中的特定位置。 当我尝试在另一台API更高的设备(23或24)上运行此代码时,我获得了摄像头的权限被拒绝,尽管我已在AndroidManifest.xml文件中添加了权限: <uses-permissio

我正在尝试创建一个应用程序,捕获一些图像,然后通过电子邮件发送。
我的问题是:
我需要为每个API创建不同的代码来访问摄像头和外部存储吗
因为我已经创建了这段代码,并且在我的手机上运行良好(API 22):

在这段代码中,我试图将捕获的图像保存在takenPicture文件中,并保存在设备中的特定位置。

当我尝试在另一台API更高的设备(23或24)上运行此代码时,我获得了摄像头的
权限被拒绝
,尽管我已在AndroidManifest.xml文件中添加了权限:

<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-feature android:name="android.hardware.camera.any" android:required="true"/>

有人能告诉我我还在学习,我真的很想知道如何使这些代码适用于任何设备。

当我第一次创建这个项目时,我把棒棒糖作为我最低的安卓系统。

在棉花糖下面,所有权限都是在安装时隐式授予的。但在API 23及以上版本上,需要明确地向用户请求运行时所需的权限

这是官方提供的样品


那么,这是否意味着如果您正在为API23及更高版本开发,您不需要在
AndroidManifest.xml
中添加权限?
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-feature android:name="android.hardware.camera.any" android:required="true"/>
if (ContextCompat.checkSelfPermission(thisActivity,
        Manifest.permission.CAMERA)
    != PackageManager.PERMISSION_GRANTED) {

    // Should we show an explanation?
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
            Manifest.permission.CAMERA)) {

        // Show an explanation to the user *asynchronously* -- don't block
        // this thread waiting for the user's response! After the user
        // sees the explanation, try again to request the permission.

    } else {

        // No explanation needed, we can request the permission.

        ActivityCompat.requestPermissions(thisActivity,
                arrayOf(Manifest.permission.CAMERA),
                MY_PERMISSIONS_REQUEST_CAMERA)

        // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
        // app-defined int constant. The callback method gets the
        // result of the request.
    }
}