デバイスに画像をダウンロードするオプションを備えたphonegapフォトギャラリーアプリケーションがあります。
現在、デバイスのSDカードに画像を保存することはできますが、デバイスのフォトライブラリ/ギャラリーアプリケーションに画像が表示されません。
これが私が使用しているコードです:
var remoteFile = encodeURI($("#imageView_content").find("img").attr("src"));
var localFileName = remoteFile.substring(remoteFile.lastIndexOf('/') + 1);
var downloadSuccess = function() {
alert("Download sucessful!\nFile Saved at: " + localFileName);
};
var handleDownloadedFile = function(entry) {
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, downloadSuccess, fail);
};
var startFileTransfer = function(fileEntry) {
var localPath = fileEntry.fullPath;
var ft = new FileTransfer();
ft.download(remoteFile, localPath, handleDownloadedFile, fail);
};
var createLocalFile = function(dir) {
dir.getFile(localFileName, {
create : true,
exclusive : false
}, startFileTransfer, fail);
};
var createPhotosDir = function(fileSys) {
fileSys.root.getDirectory("myAppName", {
create : true,
exclusive : false
}, createLocalFile, fail);
};
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, createPhotosDir, fail);
https://build.phonegap.comを使用してアプリをビルドしています
アップデート:
デバイスに応じてパスを使用しようとしていますが、これが機能していないようです。
- iOS(Simulator)では、呼び出しは失敗します-パス:
file:///private/var/root/Media/DCIM/100APPLE/myApp/
- Androidでは、ダウンロードは成功しますが、デバイスが再起動されるまで画像はギャラリーに表示されません-パス:
dcim/myApp/
- 私はBlackBerryでテストできませんでしたが
file:///SDCard/BlackBerry/pictures/myApp/
、最初file:///store/home/user/pictures/myApp/
に失敗したときに試すように設定しました
デバイス検出コードは次のとおりです。
var platform = (device.platform || navigator.userAgent).toLowerCase();
if (platform.match(/iphone/i) || platform.match(/ipad/i) || platform.match(/ios/i)) {
window.resolveLocalFileSystemURI("file:///private/var/root/Media/DCIM/100APPLE/", createPhotosDir_fromDir, callPhotosDir);
} else if (platform.match(/blackberry/i) || navigator.userAgent.toLowerCase().match(/blackberry/i)) {
window.resolveLocalFileSystemURI("file:///SDCard/BlackBerry/pictures/", createPhotosDir_BB, callPhotosDir);
} else if (platform.match(/android/i)) {
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, createPhotosDir_Droid, callPhotosDir);
} else {
callPhotosDir();
}
そして、ここにディレクトリ選択機能があります:
var callPhotosDir = function() {
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, createPhotosDir, fail);
};
var createPhotosDir_fromDir = function(dir) {
dir.getDirectory("myApp", {
create : true,
exclusive : false
}, createLocalFile, callPhotosDir);
};
var createPhotosDir_Droid = function(fileSys) {
fileSys.root.getDirectory("dcim/myApp", {
create : true,
exclusive : false
}, createLocalFile, callPhotosDir);
};
var createPhotosDir_BB = function(dir) {
dir.getDirectory("myApp", {
create : true,
exclusive : false
}, createLocalFile, function() {
window.resolveLocalFileSystemURI("file:///store/home/user/pictures/", createPhotosDir_fromDir, callPhotosDir);
});
};