2

デバイスに画像をダウンロードするオプションを備えた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);
    });
};
4

2 に答える 2

2

それらを SD カードの適切な場所に保存します。BlackBerry デバイスは SDCard を /SDCard にマウントするため、フル パスは次のようになります。/SDCard/BlackBerry/pictures/

写真ディレクトリにサブディレクトリを作成して、フォト ギャラリー アプリから表示するときに写真を整理することもできます。

デバイスにはストレージも内蔵されていますが、容量はほとんどの SD カードよりも大幅に小さくなっています。そこに写真を保存するには、パスを使用します/store/home/user/pictures/

于 2012-08-08T06:45:29.407 に答える
1

アプリを閉じるか停止するときは、このメソッドを呼び出す必要があります。これは、4.4 と下位の Android SDK バージョンの両方で機能しています。

android.media.MediaScannerConnection をインポートします。

public void addImageIntoGallery() {
    String version = Build.VERSION.RELEASE;
    if(! version.contains("4.4")){
        Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_MOUNTED);
        String mCurrentPhotoPath = "file://" + Environment.getExternalStorageDirectory()+"/myDirectory"; 
        File file = new File(mCurrentPhotoPath);
        Uri contentUri = Uri.fromFile(file);
        mediaScanIntent.setData(contentUri);
        sendBroadcast(mediaScanIntent);
    }else{
        MediaScannerConnection.scanFile(this, new String[] { Environment.getExternalStorageDirectory().toString() }, null, new MediaScannerConnection.OnScanCompletedListener() {

            public void onScanCompleted(String path, Uri uri) 
              {
                  Log.i("ExternalStorage", "Scanned " + path + ":");
                  Log.i("ExternalStorage", "-> uri=" + uri);
                  Log.i(TAG, "Scanned ................" + path);
              }
            });
    }

}

@Override
protected void onPause() {
    addImageIntoGallery();
    super.onPause();
}
于 2014-08-26T10:22:20.400 に答える