本地文件 phonegap 与在线构建应用程序

Posted

技术标签:

【中文标题】本地文件 phonegap 与在线构建应用程序【英文标题】:Local file phonegap with online building app 【发布时间】:2014-08-21 15:24:25 【问题描述】:

我是 phonegap 的新手,我需要知道将文件放在本地文件夹的什么位置以及如何访问它们。我试图用eclipse等在我的电脑上构建我的应用程序,但是要安装的东西太多了,用户变量,命令行......我试过但它不起作用,我不知道问题出在哪里,然后我尝试从build.phonegap.com 构建我的应用程序,它运行良好。我遇到的问题是我需要读取音频文件,我尝试了Audio 对象和Media 对象,但它们不起作用。

我找了解决办法,发现你必须把你的本地文件放在assets/或者android_assets/,你需要访问它们,我不知道怎么做

/assets/file.wav
file:///android_assets/file.wav

所以我开始添加assets/android_assets/audios/whatever/ 等文件夹,但没有任何效果。

你能告诉我把我的文件放在哪里以及如何访问它们吗? 没有命令行,没有 eclipse... 只是在从 build.phonegap.com 构建应用程序之前手动进行

【问题讨论】:

所有资源媒体放在www文件夹或任何地方,在Android中访问它的路径是“file:///android_asset/www/”。在IOS中你不需要添加完整路径,只需要路径文件:'path from www to'。 请解释一下,我有一个文件 index.html 和一个文件夹 audio 包含我的文件,我需要访问这个文件,我应该创建一个文件夹 android_asset 还是 www ... ??或者我应该保留我的文件夹音频并使用 file://andoird_asset/www/audio/file.wav 访问我的文件 【参考方案1】:

这是一个有用的链接,可能会有所帮助:link

你安装了文件插件吗?因为这是它所必需的。如果没有,首先你需要安装它,在项目文件夹的命令行中输入这个命令(不难):

cordova 插件添加 org.apache.cordova.file

根据文件插件文档,存储文件的最佳位置是以下路径:

file:///data/data/app-id/files/files/您的文件夹/您的文件

例如:file:///data/data/com.phonegap.myapp/files/files/audio/file.wav

这是持久的、可读/可写的,操作系统不会清除它并且是私有的。 “使用内部存储器在应用程序的沙箱中进行持久和私有的数据存储”

在您的程序中,您可以这样引用它:cordova.file.dataDirectory

例如,这是我的应用程序中的代码,它从 URL 下载图像并将其放入 HTML 中的图像标记中:

window.requestFileSystem(LocalFileSystem.PERSISTENT,0,function(fileSystem)     
                var imageURL = "http://example.com/image.jpeg";
                var ext = imageURL.substr(imageURL.lastIndexOf('.') + 1); //extension of the image
                var relativeFilePath = "images/myimage" + "." + ext;
                var ft = new FileTransfer();
                ft.download(imageURL, fileSystem.root.toURL() + relativeFilePath, function(entry) 
                    var myImage= "<img src=" + fileSystem.root.toURL() + relativeFilePath + "' id=" + "imageID" + ">";
                    alert(fileSystem.root.toURL() + relativeFilePath);   //kép
                    $('#imgdiv').html(myImage);
                , function(err)  alert("Download failure: " + JSON.stringify(err)); );
            , function(err)  alert("requestFileSystem failure: " + JSON.stringify(err)); );

在此代码中,fileSystem.root.toURL() 指的是 file:///data/data/com.phonegap.myapp/files/files/

而relativeFilePath是我自己创建的,指的是images/myimage.jpeg

(对于需要文件传输插件的下载,可以使用安装

cordova 插件添加 org.apache.cordova.file-transfer 命令)。

我希望这会有所帮助。

【讨论】:

当我运行命令cordova plugin ... 时,它说当前工作目录不是基于cordova 的项目 这里是一个关于必须做什么的链接:link。如果您以这种方式创建了 Phonegap 项目: cordova create hello com.example.hello HelloWorld ,其中 hello 是目录名称,com.example.hello 是您的应用 ID,HelloWorld 是应用显示标题。然后使用 cd hello 命令进入项目文件夹并使用 cordova platform add android 添加 android 平台。这里有你写cordova plugin add org.apache.cordova.file命令。 Doc 没有任何效果,我尝试过通过ui和命令行构建,一切正常,直到应用程序测试,找不到文件 这对我来说是完美的解决方案。非常感谢,找了几个小时。这个解决方案解决了我的问题。非常感谢@spaghetti_code【参考方案2】:

@Khalid 你必须手动创建项目:

project_folder
  |___index.html
  |___audio_folder
  |___any resources or folder

请查看 Phonegap Build 中的文档

编辑1:通过Media对象播放媒体文件

// Get path 'www' in Android
function getPathApp()
  return location.href.slice(0,-10);

var media = new Media(getPathApp() + 'audio/file.wav');

// In IOS only need path from audio folder
var media = new Media('audio/file.wav');

media.play();

【讨论】:

好的,那么使用路径是什么??因为从index.html 路径audio_folder/file.wav 不起作用 我做了这一切,但如何访问audio_folder 中的文件是个问题

以上是关于本地文件 phonegap 与在线构建应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Phonegap/Sencha 语言本地化

无法获得本地通知以在 phonegap 中触发

从 XCode 访问 Mac 上的本地主机? Phonegap 通过 Ajax 与本地 Rails 应用程序通信

XCode PhoneGap 本地化

将电话应用程序(phonegap)连接到本地主机文件(在本地机器中)

phonegap 无法与本地主机上的 xampp 服务器连接