如何通过expo插件向AndroidManifest添加权限?

问题描述 投票:0回答:2

我的expo React本机应用程序通过HTTP post请求与斑马打印机进行通信,这在网络上工作得很好,但是在Android上,我怀疑iOS上也不是这种情况,从我收集的情况来看,我需要添加一些类似的内容:

<uses-permission android:name="android.permission.INTERNET" />

进入androidmanifest.xml,但是expo不允许您直接访问该文件,所以我需要制作一个expo插件,通过expo将权限放入androidmanifest中。

我发现这篇post教如何remove权限,但是我当前的情况要求我add权限仍然会链接下面帖子中的代码:

const { withAndroidManifest } = require("@expo/config-plugins")

module.exports = function androiManifestPlugin(config) {
  return withAndroidManifest(config, async config => {
    let androidManifest = config.modResults.manifest

    // add the tools to apply permission remove
    androidManifest.$ = {
      ...androidManifest.$,
      "xmlns:tools": "http://schemas.android.com/tools",
    }

    // add remove property to the audio record permission
    androidManifest["uses-permission"] = androidManifest["uses-permission"].map(
      perm => {
        if (perm.$["android:name"] === "android.permission.RECORD_AUDIO") {
          perm.$["tools:node"] = "remove"
        }
        return perm
      }
    )

    return config
  })
}

有人知道如何向我的 expo 应用程序添加 http 权限吗?谢谢。

android react-native http expo zebra-printers
2个回答
3
投票

要添加权限,您不需要 expo-plugins。

您只需在 app.json 中添加权限(如果您有动态配置,则添加到 app.config.js 中)

在 Android 上,权限比 iOS 简单一些。在托管工作流程中,权限通过 app.json 文件中的 android.permissions 属性进行控制。

https://docs.expo.dev/guides/permissions/


0
投票

添加权限的示例

/** @type {import("@expo/config-plugins").ConfigPlugin} */
const defineConfig = (config) => {
    const { AndroidConfig, withAndroidManifest } = require('@expo/config-plugins');
    config = withAndroidManifest(config, (config) => {
      let androidManifest = config.modResults.manifest;
      const permissions = androidManifest["uses-permission"] || [];
      androidManifest["uses-permission"] = [...permissions, {
        $: {
          'android:name': 'android.permission.WAKE_LOCK',
        }
      }]

      return config
    })

    return config
}

module.exports = defineConfig;
© www.soinside.com 2019 - 2024. All rights reserved.