2016-01-07 1 views
0

Je télécharge une image en utilisant apache cordova. Mais l'image n'apparaît pas dans la galerie. Quel pourrait être le problème et comment réparer? Voici mon code pour télécharger l'image.Image téléchargée avec Cordova FileTransfer n'apparaît pas dans la galerie

var url = "http://example.com/some.jpg"; 
var filename = "varun.jpg"; 
var targetPath = cordova.file.externalRootDirectory + "Download/" + filename; 
$cordovaFileTransfer.download(url, targetPath) 
    .then(function (entry) { 
     $scope.downloadProgress = 0; 
    }, function (error) { 
     alert(JSON.stringify(error)); 
    }, function (progress) { 
     $timeout(function() { 
      $scope.downloadProgress = (progress.loaded/progress.total) * 100; 
     }) 
    }); 
+0

Y a-t-il des erreurs produites pendant/après le téléchargement? – drys

+1

Non, erreurs. Le fichier a été enregistré avec succès. J'ai ouvert le fichier en utilisant l'explorateur de fichiers et il s'est bien ouvert. Mais il ne détecte pas dans la galerie. J'ai également téléchargé cette image en utilisant le navigateur chrome mobile et il a été détecté alors. –

+0

Avez-vous effectué une entrée dans votre stratégie de sécurité du contenu pour la source de l'image? – Joerg

Répondre

1

Lorsque vous fermez ou arrêtez votre application, vous devez appeler cette method.This travaille pour moi à la fois 4.4 ainsi que la version Android sdk inférieure.

import 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(); 
} 

OU

Enregistrez-les dans le bon endroit sur la carte SD. Les terminaux BlackBerry montent la SDCard sur/SDCard, donc le chemin complet est/SDCard/BlackBerry/pictures/

Vous pouvez également créer un sous-répertoire dans le répertoire des images, qui organisera les photos lorsqu'il est affiché depuis l'application Galerie de photos.

Les périphériques disposent également d'un stockage intégré, bien que la capacité soit sensiblement inférieure à celle de la plupart des cartes SD. Pour enregistrer des images là-bas, utiliser si cela ne suffit pas voir alors cet article http://docs.phonegap.com/en/edge/cordova_file_file.md.html#File

ou cette Phonegap - Save image from url into device photo gallery

+1

Comment pouvons-nous intégrer le code Java dans l'application ionique/cordova? J'ai essayé l'autre réponse que vous avez donnée, mais ça ne marche pas. –

+1

http://trinhtrunganh.com/correct-way-to-integrate-cordova-plugin-in-angularjs-ionic-framework/ ou https://forum.ionicframework.com/t/calling-native-code-sdks- from-ionic/12748 – youngdero

+1

J'ai redémarré mon téléphone et, étonnamment, mes fichiers mp3 sont ajoutés au lecteur de musique. Je n'ai pas essayé votre code, mais cela doit fonctionner si je le garde à la bonne place. Si je garde ce code dans le plugin de transfert de fichiers Cordova juste après l'enregistrement du fichier, cela fonctionnera-t-il? Merci. –

2

le chemin/magasin/home/user/images/

Pour afficher l'image sur la galerie après le téléchargement ajouter ce plugin cordova:

ionic plugin add https://github.com/lotterfriends/refreshgallery 

et après il suffit d'ajouter cette ligne sur votre code:

var url = "http://example.com/some.jpg"; 
var filename = "varun.jpg"; 
var targetPath = cordova.file.externalRootDirectory + "Download/" + filename; 
$cordovaFileTransfer.download(url, targetPath) 
.then(function (entry) { 
    $scope.downloadProgress = 0; 
    refreshMedia.refresh(targetPath); // <--- this one here 

}, function (error) { 
    alert(JSON.stringify(error)); 
}, function (progress) { 
    $timeout(function() { 
     $scope.downloadProgress = (progress.loaded/progress.total) * 100; 
    }) 
}); 

Cependant, cela montre l'image sur la galerie, mais pas sur le dossier de téléchargement pour moi