首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Cordova 10和Android 30 :无法访问本地文件(“不允许加载本地资源: file:///storage/emulated/0/Android/data...")”)

Cordova 10和Android 30 :无法访问本地文件(“不允许加载本地资源: file:///storage/emulated/0/Android/data...")”)
EN

Stack Overflow用户
提问于 2021-09-08 12:34:37
回答 1查看 903关注 0票数 2

我正在尝试更新我的cordova应用程序,使其使用SDK 30而不是29,而且我有一个无法解决的问题。

显然,webview的setAllowAccessFile的默认值在Android 29和30之间从true变为false。问题是,在我的cordova应用程序中,我无法访问WebView API,因此需要用config.xml文件更改这个值。但我找不到合适的选择。

或者至少,我认为问题来自于这里。

App是一个与Cordova 10一起为Android打包的角形应用程序。我尝试从Android8.1.0切换到Android10,以添加新的MANAGE_EXTERNAL_STORAGE权限,还有一些其他的东西我很确定不能用,但是,嗯.但什么都没改变。

如果你知道该怎么做,或者问题还会从何而来,我很乐意接受你的建议。

非常感谢。

config.xml:

代码语言:javascript
运行
复制
<?xml version='1.0.0' encoding='utf-8'?>
<widget xmlns:android="http://schemas.android.com/apk/res/android" id="my.package.name" version="1.0.6" xmlns="http://www.w3.org/ns/widgets">
  <name>My package name</name>
  <description>

  </description>
  <author email="my.email@email.com" href="https://my.website">
    My website
  </author>

  <content src="index.html"/>

  <plugin name="cordova-plugin-whitelist" spec="1"/>
  <plugin name="cordova-plugin-wkwebview-engine" spec="https://github.com/driftyco/cordova-plugin-wkwebview-engine.git"/>
  <plugin name="cordova-plugin-wkwebview-engine" spec="1.2.1"/> 
  <plugin name="cordova-plugin-device" spec="~1.1.5"/>
  <plugin name="cordova-plugin-statusbar" spec="~2.2.2"/>
  <plugin name="cordova-plugin-splashscreen" spec="~4.0.2"/>
  <plugin name="cordova-plugin-file" spec="~6.0.0"/>
  <plugin name="cordova-plugin-zip" spec="~3.1.0"/>
  <plugin name="cordova-plugin-app-version" spec="~0.1.9"/>
  <plugin name="cordova-plugin-network-information" spec="~3.0.0"/>

  <plugin name="cordova-plugin-save-image" spec="0.2.5"/> 
  
  <plugin name="cordova-plugin-customurlscheme" spec="https://github.com/EddyVerbruggen/Custom-URL-scheme.git">
    <variable name="URL_SCHEME" value="my.package.name" />
  </plugin>

  <plugin name="cordova-plugin-intent" spec="https://github.com/napolitano/cordova-plugin-intent.git" />
  
  <feature name="StatusBar">
    <param name="ios-package" value="CDVStatusBar" onload="true"/>
  </feature>
  
  <preference name="Fullscreen" value="true" /> 
  <preference name="StatusBarOverlaysWebView" value="false"/>
  <preference name="DisallowOverscroll" value="true"/>
  <preference name="SplashScreen" value="screen"/>
  <preference name="SplashScreenDelay" value="3000"/>
  <preference name="SplashMaintainAspectRatio" value="true"/>
  <preference name="SplashScreenBackgroundColor" value="white"/>


  <preference name="android-minSdkVersion" value="21"/>
  <preference name="android-targetSdkVersion" value="30"/>


  <preference name="Orientation" value="landscape"/>

  <access origin="*"/>

  <allow-navigation href="http://localhost:8080/*"/>
  <feature name="CDVWKWebViewEngine">
    <param name="ios-package" value="CDVWKWebViewEngine"/>
  </feature>

  <preference name="CordovaWebViewEngine" value="CDVWKWebViewEngine"/>

  <allow-intent href="http://*/*"/>
  <allow-intent href="https://*/*"/>
  <allow-intent href="tel:*"/>
  <allow-intent href="sms:*"/>
  <allow-intent href="mailto:*"/>
  <allow-intent href="geo:*"/>

  <platform name="android">
    <edit-config file="AndroidManifest.xml" target="/manifest/application" mode="merge">
      <application android:allowBackup="false"/>
    </edit-config>
    <edit-config file="AndroidManifest.xml" target="/manifest/application" mode="merge">
      <application android:fullBackupContent="false"/>
    </edit-config>
    <edit-config file="AndroidManifest.xml" target="/manifest/application" mode="merge">
      <application android:largeHeap="true" />
    </edit-config>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
    <preference name="AndroidLaunchMode" value="singleTask"/>
    <allow-intent href="market:*"/>
    <intent-filter>
      <action name="android.intent.action.SEND"/>
      <action name="android.intent.action.SEND_MULTIPLE"/>
      <category name="android.intent.category.DEFAULT"/>
      <data mimeType="*/*"/>
    </intent-filter>

    <intent-filter label="@string/launcher_name">
        <action name="android.intent.action.MAIN" />
        <category name="android.intent.category.LAUNCHER" />
    </intent-filter>
  </platform>

  <platform name="ios">
    <allow-intent href="itms:*"/>
    <allow-intent href="itms-apps:*"/>
     <preference name="WKWebViewOnly" value="true" />

    <feature name="CDVWKWebViewEngine">
        <param name="ios-package" value="CDVWKWebViewEngine" />
    </feature>

    <preference name="CordovaWebViewEngine" value="CDVWKWebViewEngine" />
  </platform>

  <engine name="ios" spec="~5.1.1"/>
  <engine name="android" spec="~10.0.0"/>
</widget>
EN

回答 1

Stack Overflow用户

发布于 2021-09-09 13:02:44

我们最近在我们的Cordova应用程序中处理了Android 11的存储/安全问题。以下是我们发现的一些东西--这可能是你的应用程序中发生的事情,也可能不是。更多的信息可以在我的回答中找到(如何在android目录中获取PhoneGap将看到的文档 --我试着不断更新):

  • 如果你能帮忙的话,离MANAGE_EXTERNAL_STORAGE许可远点。谷歌保留了对需要扫描文件系统的应用程序的许可(我猜病毒扫描器等等) --其他应用程序将被拒绝。
  • 我不知道怎么说,但是Android6.x添加了一组额外的授权权限,您的应用程序需要在运行时请求这些权限(而不是AndroidManifext.xml文件中的权限)。我目前正在使用cordova.plugins.diagnostic插件,将ANDROIDX_VERSION标志设置为1.0.0。以下是相关代码: //请求读取对外部存储的访问,如果我们没有它的cordova.plugins.diagnostic.getExternalStorageAuthorizationStatus(function (状态){ if (状态=== cordova.plugins.diagnostic.permissionStatus.GRANTED) {console.log(“外部存储使用是授权的”);}{ cordova.plugins.diagnostic.requestExternalStorageAuthorization(function (结果){console.log(“外部存储使用授权请求是”+(结果=== ===?“授予”:“拒绝”);},函数(错误){console.error(错误);};},函数(错误){console.error(“发生下列错误:”+错误);});//请求运行时权限(如果需要的话),cordova.plugins.diagnostic.getPermissionsAuthorizationStatus(function(statuses){用于(状态中的var权限){开关(状态权限){ case cordova.plugins.diagnostic.permissionStatus.GRANTED: console.log(“授予使用权限”+权限);中断;case cordova.plugins.diagnostic.permissionStatus.NOT_REQUESTED: console.log(“使用"+permission+”的权限尚未被请求;立即询问“);cordova.plugins.diagnostic.requestRuntimePermission(function(status){ console.log(“运行时权限请求结果:”+status.toString();} ),函数(console.error){console.error(“发生以下错误:”+错误);},权限);中断;case cordova.plugins.diagnostic.permissionStatus.DENIED_ONCE: console.log(“拒绝使用"+permission+”-再次询问?“);case cordova.plugins.diagnostic.permissionStatus.DENIED_ALWAYS: console.log(“永久拒绝使用"+permission+”--猜我们那时不会使用它!“);} },函数(错误){console.error(“发生下列错误:”+错误);},cordova.plugins.diagnostic.permission.WRITE_EXTERNAL_STORAGE,cordova.plugins.diagnostic.permission.READ_EXTERNAL_STORAGE ); 请注意,还有其他插件可以请求适当的运行时权限/授权。诊断问题是我第一次遇到这个问题时遇到的。

希望这能有所帮助。我们的应用程序在GitHub上,如果您需要交换注释:https://github.com/adapt-it/adapt-it-mobile

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69103208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档