我正在为 firefox aurora (android) 开发一个 webapp。我有一个文件输入。但是当用户点击输入时,他们不能从 sdcard 或文件系统中选择文件,只有图片、音乐或视频。
我在MOZILLA DEVELOPER NETWORK上搜索,但找不到任何有用的东西。
在我的 manifest.webbapp 我有设备存储权限:
"permissions": {
"device-storage:sdcard":{ "access": "readonly" }
},

我正在为 firefox aurora (android) 开发一个 webapp。我有一个文件输入。但是当用户点击输入时,他们不能从 sdcard 或文件系统中选择文件,只有图片、音乐或视频。
我在MOZILLA DEVELOPER NETWORK上搜索,但找不到任何有用的东西。
在我的 manifest.webbapp 我有设备存储权限:
"permissions": {
"device-storage:sdcard":{ "access": "readonly" }
},

根据源代码,此权限仅授予已打包和特权的应用程序,后者也意味着该应用程序必须由 Marketplace 签名。
您可以在此处找到有关打包应用程序和特权应用程序类型的更多信息: https ://developer.mozilla.org/en-US/docs/Apps/Packaged_apps
我假设您目前只是使用标记?
device-storage:sdcard 确实适用于一组非常不同的用例。我们还没有在 Firefox for Android 上实现它。
显示的应用程序列表只是我们从 Android Intents 系统获得的一组应用程序。我可以想象,如果用户安装了某种文件浏览器应用程序,它可能会响应该意图并且它会在那里弹出。
但当然,这不是您可以在应用程序中依赖的东西。
老实说,我对android上没有提供该功能的默认应用程序感到有些惊讶,但我想就是这样。或者有人知道一种方法来获得我们可以连接的文件选择器意图吗?
中期您将能够使用 DeviceStorage API。这将使您可以直接 JS 访问 SD 卡,这将允许您构建自己的 UI 以从 SD 卡中选择文件。但这种额外的力量也有很多缺点。这是一个特权 API,这意味着您必须将应用程序编写为打包应用程序,并且您必须使用 CSP。而且您必须通过 Firefox 市场审查流程(所有特权应用程序都必须通过代码审查)。
所以这是一个相当遥远的第二选择。
除此之外没有任何解决方案。最好的办法当然是我们可以弹出一个 Android 文件选择器,但我不确定这是否可行。而且它肯定还没有实施。
只需安装 Android 文件管理器应用程序 ( https://play.google.com/store/search?q=file+manager&c=apps ),您就可以从 SD 卡中选择文件。不需要特定权限,因为这是由标准文件输入自动处理的。
只能通过特权或经过认证的应用程序访问 SD 卡。目前据我所知,没有像您希望的那样集成系统菜单。就个人而言,我希望这会有所改变。
API 文档:https ://developer.mozilla.org/en-US/docs/WebAPI/Device_Storage
您可以创建自己的菜单来模仿系统菜单;通过这种方式,用户可以获得无缝体验,并且他们不知道其中的区别。尽管它不是无法克服的样板水平,但它需要一些样板。
浏览/枚举 SDCard 上所有照片的快速片段:
var storage = navigator.getDeviceStorage("sdcard");
sdcard.browse = function () {
var pics = navigator.getDeviceStorage('pictures');
// Let's browse all the images available
var cursor = pics.enumerate();
cursor.onsuccess = function () {
var file = this.result;
alert("File found: " + file.name);
// Once we found a file we check if there are other results
if (!this.done) {
// Then we move to the next result, which call the cursor
// success with the next file as result.
this.continue();
}
}
cursor.onerror = function () {
alert("No files found: " + this.error);
}
};
如果您想了解更多有关读取、写入和计算可用存储的详细信息,我目前正在利用业余时间开发一个小型包装库,以便更轻松地使用 SDCard(并处理一些回调以更好地与其他代码集成)在我的业余时间,可能可以帮助你。