uniapp打包成app 华为上架申请权限添加使用说明

因为华为上架需要添加申请权限时的使用说明,否则就无法通过审核,就封装了申请权限时弹出权限说明窗口,利用了本地存储如果权限已经通过就不弹权限说明窗口直接调用回调,如果没有通过或没有就弹出申请权限弹窗。

1.页面组件

<template>
    <view>
        <view v-if="showTips" class="fixed bgFF radio30 absolute tips fs28 color02">
            <view class="lh50">
                {
  {actionPermission.title}}使用说明:
            </view>
            <view class="lh50">
                {
  {actionPermission.tips}}
            </view>
        </view>
        <u-popup :show="show" @close="close" mode="center" round="30rpx">
            <view class="padding50 bgFF content text-center radio20 fs32 color">
                <view class="wh100">
                    <view class="lh50 marginB40">
                        您已禁止{
  {actionPermission.title}},如需要使用请设置!
                    </view>
                    <view @click="handelAllow" class="fw600 paddingT40 borderT1">
                        去设置
                    </view>
                </view>
            </view>
        </u-popup>
    </view>
</template>

<script>
    import {
        tipsConfig
    } from './index.js'
    import permision from './permission.js'
    export default {
        data() {
            return {
                show: false,
                key: 'CAMERA',
                // isSetting: false,
                showTips: false
            }
        },
        computed: {
            actionPermission() {
                return tipsConfig[this.key]
            }
        },
        methods: {
            async showView(key = 'CAMERA', callback) {
                // #ifdef APP-PLUS
                // 获取系统信息
                const systemInfo = uni.getSystemInfoSync();
                // 判断是否为ios
                const isIos = systemInfo?.platform === 'ios';
                if (isIos) {
                    return callback && callback()
                }
                this.key = key
                // 如果返回1 则是允许权限 直接调用回调就行 如果是0则询问 -1则永久拒绝
                const permission = uni.getStorageSync('permission') || {}
                const keyStatus = permission[this.actionPermission?.key] || null
                if (keyStatus == 1) {
                    return callback && callback()
                }
                // else if (keyStatus == -1) {
                //  this.show = true
                //  return
                // }
                const result = await this.requestAndroidPermission()
                permission[this.actionPermission?.key] = result
                uni.setStorageSync('permission', permission)
                if (result == 1) {
                    callback && callback()
                } else {
                    this.show = true
                }
                //#endif
                // #ifndef APP-PLUS
                callback && callback()
                //#endif
            },
            close() {
                this.show = false
                this.showTips = false
            },
            /**
             * 禁止
             */
            handelProhibited(status) {
          
### 解决 UniApp 应用在华为手机上的权限问题 #### 权限配置概述 对于 UniApp 打包的应用,在华为设备上运行时可能会遇到权限请求失败的情况。这通常涉及到 Android 的权限管理机制,特别是针对特定功能如定位、相机等的访问控制[^1]。 #### 配置 `manifest.json` 文件中的权限设置 为了确保应用能够正常获取所需的权限,需编辑项目根目录下的 `manifest.json` 文件: - 进入 `"App常用其它设置"` -> `"Android设置"` - 修改或确认已勾选必要的权限选项,例如位置信息、摄像头等功能对应的权限 - 特别注意调整 `"targetSdkVersion"` 参数至合适版本,以匹配目标系统的 API 级别要求[^3] ```json { "app-plus": { ... "distribute": { "android": { "permissions": [ "ACCESS_FINE_LOCATION", "CAMERA" ], "targetSdkVersion": 30 } } } } ``` #### 使用云测试平台验证权限处理逻辑 完本地修改之后,建议利用厂商提供的云端真机调试环境来检验更新后的 APK 是否解决了原有权限相关的问题。通过这种方式可以更高效地排查并修正潜在错误,从而提高发布功率[^2]. #### 处理动态权限申请 除了静态声明外,还需考虑运行期间向用户主动发起敏感操作许可请求的情形。比如调用 `uni.chooseImage()` 或者 `uni.getLocation()` 方法前应先检查当前是否有足够的授权状态;如果尚未获得,则引导使用者授予相应权利给应用程序使用。 ```javascript // 检查并请求相机权限示例 async function checkCameraPermission() { const status = await uni.getSystemInfoSync().platform === 'android' ? uni.authorize({scope: 'scope.camera'}) : {}; if (status.errMsg !== 'authorize:ok') { console.log('User denied camera permission'); return false; } // 继续执行依赖于相机的操作... } checkCameraPermission(); ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值