如何使用PhoneGap在Android Native Image Gallery中打开图像目录?

时间:2012-10-24 13:41:46

标签: android jquery cordova

我开发了一款应用,想要一个链接来打开图片库。这些图像是本地捆绑的,并包含在我的assets / www / img目录中。 我希望这与本机图库无缝衔接。 这可能吗?

我试过使用以下内容,但无法得到答复。

document.addEventListener("deviceready", onDeviceReady, false);

        // PhoneGap is ready
        //
        function onDeviceReady() {
            window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFileSystemSuccess, fail);
        }

        function onFileSystemSuccess(fileSystem) {
            fileSystem.root.getDirectory("img/china", {create: false, exclusive: false}, getDirSuccess, fail);
        }

        function getDirSuccess(dirEntry) {
            // Get a directory reader
            var directoryReader = dirEntry.createReader();

            // Get a list of all the entries in the directory
            directoryReader.readEntries(readerSuccess,fail);
        }

        var numDirs = 0;
        var numFiles = 0;

        var readerTimeout = null, millisecondsBetweenReadSuccess = 100;

        function readerSuccess(entries) {
            var i = 0, len = entries.length;
            for (; i < len; i++) {
                if (entries[i].isFile) {
                    numFiles++;
                    entries[i].file(fileSuccess,fail);
                } else if (entries[i].isDirectory) {
                    numDirs++;
                    getDirSuccess(entries[i]);
                }
                if (readerTimeout) {
                    window.clearTimeout(readerTimeout);
                }
            }
            if (readerTimeout) {
                window.clearTimeout(readerTimeout);
            }
            readerTimeout = window.setTimeout(weAreDone, millisecondsBetweenReadSuccess);
        }

        // additional event to call when totally done
        function weAreDone() {
           // do something
        }

2 个答案:

答案 0 :(得分:0)

相机文档涵盖了此内容。这不适合你吗?

如果Camera.sourceType = Camera.PictureSourceType.PHOTOLIBRARY或Camera.PictureSourceType.SAVEDPHOTOALBUM,则会显示照片选择器对话框,从中可以选择相册中的照片。

http://docs.phonegap.com/phonegap_camera_camera.md.html

另请参阅......

使用PhoneGap&amp; amp;浏览图像库的Android

我正在将我为iPhone写的应用程序移植到Android上,我想从相机功能开始。我环顾四周,谷歌搜索,我找不到如何在Android设备上浏览图库的文件。我决定对现有的Camera对象进行一些简单的修改,以支持现在的功能。我是未来,希望PhoneGap的人能更好地实现这一点,我可以将这些代码放到牧场。

此代码需要添加到phoneGap.js文件中。它为在设备上浏览图库的新方法创建原型

1   //
2   // add the new prototype to support the browse function
3   //
4   // i have created a new class 'PixCameraLauncher' so I did not have to modify
5   // the original class file provided by PhoneGap
6   //
7   com.phonegap.CameraLauncherProxy.prototype.browseImages = function(quality) {
8       return PhoneGap.exec("com.phonegap.gapTest.PixCameraLauncher", "browseImages", [quality]);
9   };

这是我对PhoneGap提供的CameraLauncher类所做的修改。添加新意图以启动图库“

01  /**
02   * Get a picture from the Image Gallery.
03   *
04   * in DroidGap.onActivityResult, which forwards the result to
05   * this.onActivityResult.
06   *
07   * @param quality
08   *            Compression quality hint (0-100: 0=low quality & high
09   *            compression, 100=compress of max quality)
10   */
11  public void browseImages(int quality) {
12      this.mQuality = quality;
13   
14      // Display camera
15      Intent intent = new Intent(Intent.ACTION_PICK,
16              android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI);
17   
18      this.ctx.startActivityForResult((Plugin) this, intent);
19  }

我们还需要处理返回的文件。我把它简单化了,但是可以稍微清理一下我所做的是假设如果数据字段中有URI,则选择一个图像并由实用程序处理。

的开头
1   void onActivityResult(int requestCode, int resultCode, Intent intent)

添加以下代码。这将处理将URI重新分配给所选文件

1   // If image available
2   if (resultCode == Activity.RESULT_OK) {
3    
4       //
5       // this means the user selected an image, so just pass it back!!
6       //
7       if (intent.getData() != null) {
8           imageUri = intent.getData();
9       }

经过一些测试和代码清理之后,我将为android工作和iphone工作提供完整的项目。如果有任何问题,请在下面发布。

答案 1 :(得分:0)

问题是您正在尝试使用File API读取应用程序资产目录中的文件。该目录实际上不是文件系统的一部分。当你执行window.requestFileSystem(LocalFileSystem.PERSISTENT,...)时,你实际上得到了/ sdcard(最有可能)。因此,当您尝试加载“img / china”时,该目录不存在。

您需要在主Java类的onCreate方法期间将资源目录中的文件复制到本地文件系统。然后,您可以使用DirectoryReader获取所有文件的列表。

或者,如果您提前知道所有图像,则可以创建自己的JSON文件,列出所有图像。然后加载该文件,并能够遍历所有条目以创建自己的图库。