开发者社区 问答 正文

上传图片,点击选择图片出现闪退。


[backcolor=transparent] 解决方案:请确认已开启访问相机,相册的权限。
[backcolor=transparent] iOS:iOS 10 开始对隐私权限更加严格,需要添加权限说明(privacy description)。如果不做设置,可能会导致崩溃、审核不通过等情况。设置如下:
在 info.plist 中增加字段:

  1. [backcolor=transparent]<key>[backcolor=transparent]NSCameraUsageDescription[backcolor=transparent]</key>
  2. [backcolor=transparent]<string>[backcolor=transparent]访问相机[backcolor=transparent]</string>
  3. [backcolor=transparent]<key>[backcolor=transparent]NSPhotoLibraryUsageDescription[backcolor=transparent]</key>
  4. [backcolor=transparent]<string>[backcolor=transparent]访问相册[backcolor=transparent]</string>

[backcolor=transparent] Android:需要相册、相机和录音的权限Android 6.0 需要开发者自己的方式实现权限获取,更低版本的使用声明即可

展开
收起
猫饭先生 2017-10-24 10:45:14 2419 分享 版权
阿里云 AI 助理回答

您提到的是关于在开发移动应用时,确保应用能够正确请求和获取用户设备的相机和相册访问权限的解决方案。这里分别针对iOS和Android系统提供了指导。

iOS平台

从iOS 10开始,苹果加强了对用户隐私的保护,要求开发者在需要访问如相机、相册等敏感数据时,必须在应用的Info.plist文件中声明相应的权限说明。如果不这样做,应用可能无法正常访问这些功能,甚至在App Store审核时被拒绝。

添加权限说明步骤:

  1. 打开您的Xcode项目
  2. 寻找并选择项目的Info.plist文件。
  3. 右键点击文件,在弹出菜单中选择“Open As” -> “Source Code”(以源代码形式打开)或者直接在可视化编辑器中查找添加权限的地方。
  4. <dict>标签内添加以下两行代码来请求相机和相册的权限(如果使用可视化编辑器,可以直接找到对应的权限项进行设置):
<key>NSCameraUsageDescription</key>
<string>访问相机</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>访问相册</string>
  1. <string>标签内的文本替换为适合您应用的具体描述,解释为什么您的应用需要这些权限。这将直接展示给用户,帮助他们理解为何要授权。

Android平台

对于Android应用,尤其是从Android 6.0(API级别23)开始,虽然在Manifest文件中声明权限仍然必要,但还需要在运行时动态请求权限。

声明权限步骤:

  1. 在AndroidManifest.xml中声明权限

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

    注意:从Android 10开始,推荐使用MANAGE_EXTERNAL_STORAGE或特定的媒体权限替代通用的存储权限。

  2. 动态请求权限: 在需要使用相机或相册功能的地方,检查是否已获得相应权限,并在未获得时发起权限请求对话框。例如,请求相机权限的示例代码:

    // 检查权限
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
           != PackageManager.PERMISSION_GRANTED) {
       // 如果应用之前请求过此权限但用户拒绝了请求,此方法将返回 true。
       if (ActivityCompat.shouldShowRequestPermissionRationale(this,
               Manifest.permission.CAMERA)) {
           // 显示解释为什么需要这个权限的对话框,然后再次请求权限
       } else {
           // 没有权限,直接请求权限
           ActivityCompat.requestPermissions(this,
                   new String[]{Manifest.permission.CAMERA},
                   MY_CAMERA_REQUEST_CODE);
       }
    }
    

    并且确保处理onRequestPermissionsResult回调方法来响应用户的权限授予决定。

通过上述步骤,您可以确保您的iOS和Android应用能够正确地向用户请求并获取所需的相机和相册访问权限。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答