我的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 权限吗?谢谢。
要添加权限,您不需要 expo-plugins。
您只需在 app.json 中添加权限(如果您有动态配置,则添加到 app.config.js 中)
在 Android 上,权限比 iOS 简单一些。在托管工作流程中,权限通过 app.json 文件中的 android.permissions 属性进行控制。
添加权限的示例
/** @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;