问题标签 [android-assetmanager]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 从 assets 文件夹中获取 mp3 文件列表并保存在共享首选项中
我有一个应用程序,其中资产文件夹中有一些 mp3 声音。在应用程序开始时,我获取文件列表并将所有文件从资产复制到 getExternalFilesDir()。为每个文件调用媒体扫描器,并且只有当媒体扫描器返回一个 URI 时,然后在共享首选项中写入一些内容
在我想要加载这些声音并播放的片段中,我在名为“RingtoneSoundChooserFragment”的片段类中编写了以下代码
我有带有播放按钮的适配器屏幕,当我想播放声音时,我点击播放按钮。但问题是,在某些 android 设备中,声音显示哔哔哔而不是实际声音。但是在某些设备中,它会保持完全静音,而在某些设备中,它可以完美地播放声音。这个问题也在 android 10 中,但它发生在随机设备上。有些完美地播放声音,有些则保持沉默或发出哔哔声。我缺少什么或我的代码有什么问题?请帮忙
android - 如何使 HTML 视频元素缓冲使用 AssetManager 加载的资产
我目前正在使用 Ionic 创建一个应用程序。因为 Google Playstore 中的 App Bundle 大小限制为 150 MB,所以我使用Play Asset Delivery来加载更大的资产,例如图像和视频。
我使用 Angulars 打字稿与 HTML 交互,但要加载 Aaset,我需要使用 java 来访问像 AssetManager 这样的 Android 平台 API。为此,我编写了一个 Cordova 插件。
加载和处理一项资产的插件的 Java 代码:
typescript 中的回调函数如下所示:
(HTML 元素无法通过路径访问资产,例如 src="assets/img1.png" 他们需要通过 java 加载)
此代码工作正常。但问题是,更大的资产(如 50 MB 视频)需要完全加载,然后作为 base64 编码的数据字符串发送,这将花费大量时间。
Afaik HTML 视频和音频元素使用缓冲区仅首先加载重要部分以尽快启动媒体,而不会占用太多内存。
有没有办法做到这一点?也许以某种方式将视频元素发送到将其与缓冲区连接绑定的 java 插件,或者每隔几帧调用一次插件以调用视频的另一部分(有点像创建自己的缓冲区)。你能帮我解决这个问题吗?
(AssetsManager打开方式默认使用ACCESS_STREAMING访问方式,还有三种,其中一种叫做ACCESS_BUFFER。)
java - 如何使用 AssetManager 和 Play Asset Delivery 在 Java 中加载 tflite 模型?
我有一个.tflite
大小超过 200MB 的模型文件。由于它增加了 150MB 的 apk 最大大小,我不得不使用 Play Asset Delivery (PAD) 将其捆绑在应用程序包中。
我按照此处提到的指南进行操作:并且能够构建我的.aab
文件。我已将我的助理添加为install-time
,所以我不必检查它的可用性,它应该与应用程序一起安装。
但似乎无法访问我的tflite
文件。
我可以使用以下方法完美地从资产文件夹中加载模型:
但这不适用于 PAD,因为我们需要使用AssetManager
,如此处所述。
所以我重写了上面的函数来使用AssetManager
:
但它似乎没有加载模型。在interpreter.run()
方法上,我收到错误:
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void org.tensorflow.lite.Interpreter.run(java.lang.Object, java.lang.Object)”
这表明模型未加载。
在这种情况下模型的路径是否不同?我将如何加载 tflite 模型?
android - 从 Playstore 下载的测试应用程序中的 android 中资产包的文件访问问题?
我对使用播放资产交付的 android 资产文件夹中的文件访问过程有疑问。我已经完成了用于部署我的 android 应用程序的播放资产交付设置,因为应用程序的大小超过 150Mb。
我按照谷歌文档设置播放资产交付模块 - install_time_asset pack 模块并将我的资产文件移动到下面给出的文件结构中:下面是我访问文件所遵循的代码结构。
早些时候我无法访问 install_time_asset_pack assets-install_time1.txt 中的文件,所以我将设置从编辑配置更改为从捆绑包而不是 APK 运行应用程序。
通过此设置,我可以从主要资产访问资产文件夹文件并安装包资产。
现在我将应用程序发布到 Google Play 控制台内部测试模块以进行封闭测试,并从 Play 商店应用程序下载了应用程序,但在测试该应用程序期间,我无法从资产访问文件,这可能是导致这种不当行为的可能原因?
android - Android 无法使用 AssetManager 显示 PDF
我想从我的活动按钮操作的资产文件夹中打开一个 PDF,我使用了以下代码,但没有任何反应。
它是由以下活动按钮操作触发的,并且从这里传递的 pdf 文件路径 url:
在 Manifest 上声明提供程序类,如下所示:
请指导我。
java - 从 InputStream 读取到 ByteBuffer.array() 时,前 4 个字节的数据被丢弃
让我给出我尝试过的简化版本。我有一个文件资产,其中包含一个原始数字数组(总共 N 个数字,每个数字为 4 个字节宽)。我InputStream
使用AssetManager
并尝试将所有数据直接推送到ByteBuffer
:
我认为这应该可以正常工作,但是我遇到了我的程序的一些奇怪行为,这让我认为数据加载毕竟不正确,事实上,在对内部的第一个内容进行了一些调试日志记录bytes
并将其与文件进行比较之后十六进制查看器中的内容我发现这种方法不会读取前 4 个字节,即bytes
内容从我的第二个 4 字节宽的数字开始。我承认我没有检查 末尾包含的内容bytes
,但我们假设它只是零。
然后我采用了另一种方法,它完全正确地读取了所有字节(但它有点难看,我想避免它):
我真的是Java和Android开发的菜鸟,所以我问这是一个平台端的错误,还是我需要更仔细地处理InputStream
/AssetManager.open(...)
以实现正确读取数据?
我已经检查了这个听起来很相似的问题,但它是关于 C#: NetworkStream 在阅读时切断前 4 个字节
这让我觉得我也应该分块读取数据并把它们ByteStream
一个一个地放入,但是我的文件并不大(小于 16MB),而且读取时显然没有数据竞争,所以我认为inputStream.read(bytes.array());
不应该那么奇怪地失败。 ..
android - 如何列出原生 Android 代码中的所有资产?
根据Google 的 repo,当请求下一个文件时,本机 AssetDir 只是跳过资产中的任何文件夹,但包含所有文件夹。如何在不使用 Java 中的 AssetManager 的 list() 的情况下列出所有目录?