---
title: 对讲录制权限
summary: 介绍 IPC 面板对讲、录制、截图等功能所需的麦克风与相册权限申请流程及处理方案。
---

# 对讲录制权限

在 IPC 面板开发过程中，针对对讲、录制、截图等功能需要主动获取对应权限

- 对讲功能：麦克风权限 (`scope.record`)
- 录制、截图功能：存储写入 相册/存储 权限 (`scope.writePhotosAlbum`)

## 问题背景

- 在自定义调用需要权限的功能时, 在 ios、android 等手机系统，首次申请相关权限时，系统会弹出权限申请弹窗，用户可以选择允许或拒绝。

- ⚠️ 一旦用户拒绝，系统将不再自动弹窗，且现有 API 无法再次触发系统权限申请弹窗。此时调用权限相关 API 会报错，需要开发者主动引导用户前往系统设置手动开启权限。

## 推荐方案

### 1. 对讲功能

**开启对讲**

1. 获取麦克风权限状态 (`ty.authorizeStatus`)
2. 若返回 (`fail`)，表示从未申请过 → 调用 (`ty.authorize`) 申请权限
3. 若 (`ty.authorize`) 仍返回 (`fail`) → 用户曾拒绝权限 → 显示自定义弹窗引导去系统设置
4. 其余成功 (`success`) 回调，表示用户已授权，可直接调用对讲功能

**示例代码**

```javascript

import { showModal, openAppSystemSettingPage } from '@ray-js/ray';

// 自定义弹窗引导用户去设置中开启权限
const showCustomDialog = () => {
  showModal({
    title: '',
    content: '您当前没有 麦克风 的访问权限, 请在设置中打开此权限'
    cancelText: '取消',
    confirmText: '去设置',
    isShowGlobal: true,
    success: res => {
        if (res.confirm) {
        // 跳转到应用设置页面
        openAppSystemSettingPage({
            scope: 'App-Settings',
            success: () => {
            console.log('跳转成功');
            },
        });
        }
    },
    });
};

const startTalkTest = () => {
    // 1.获取麦克风权限状态
    ty.authorizeStatus({
        scope: 'scope.record',
        success: () => {
            // 用户已授权，可直接调用对讲功能
        },
        fail: () => {
           // 2. 用户未申请过权限，调用申请麦克风权限
           ty.authorize({
                scope: 'scope.record',
                success: success => {
                  // 权限已通过，可直接调用对讲功能
                },
                fail: err => {
                  // 3. 用户曾拒绝过权限，需自行引导用户手动去设置中开启权限
                  showCustomModal();
                },
              });
        }
    })
}
```

### 2. 录制截图功能

**开启录制或截图**

1. 获取 相册/存储 权限状态 (`ty.authorizeStatus`)
2. 若返回 (`fail`)，表示从未申请过 → 调用 (`ty.authorize`)
3. 若 (`ty.authorize`) 返回 (`fail`) → 用户曾拒绝 → 引导去系统设置手动开启
4. 若返回 (`success`) → 表示权限已开启，可直接使用录制或截图功能

> 💡 **注意** 录制功能开启后，需在3秒后再调用录制结束功能, 否则大概率报错

**示例代码**

```javascript

import { showModal, openAppSystemSettingPage } from '@ray-js/ray';

// 自定义弹窗引导用户去设置中开启权限
const showCustomDialog = () => {
  showModal({
    title: '',
    content: '您当前没有 相册/存储 的访问权限, 请在设置中打开此权限'
    cancelText: '取消',
    confirmText: '去设置',
    isShowGlobal: true,
    success: res => {
        if (res.confirm) {
        // 跳转到应用设置页面
        openAppSystemSettingPage({
            scope: 'App-Settings',
            success: () => {
            console.log('跳转成功');
            },
        });
        }
    },
    });
};

const startRecordTest = () => {
    // 1.获取写入 相册/存储 权限状态
    ty.authorizeStatus({
        scope: 'scope.writePhotosAlbum',
        success: () => {
            // 用户已授权，可直接调用录制或截图功能
        },
        fail: () => {
           // 2. 用户未申请过权限，调用申请 相册/存储 权限
           ty.authorize({
                scope: 'scope.writePhotosAlbum',
                success: success => {
                  // 权限已通过，可直接调用录制或截图功能
                },
                fail: err => {
                  // 3. 用户曾拒绝过权限，需自行引导用户手动去设置中开启权限
                  showCustomModal();
                },
              });
        }
    })
}
```
