1

アプリを開発しましたが、画像のギャラリーを開くためのリンクが必要です。画像はローカルにバンドルされ、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
        }
4

2 に答える 2

0

カメラのドキュメントはこれをカバーしています。これはうまくいきませんか?

Camera.sourceType = Camera.PictureSourceType.PHOTOLIBRARY または Camera.PictureSourceType.SAVEDPHOTOALBUM の場合、アルバムから写真を選択できる写真選択ダイアログが表示されます。

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

また、参照してください...

PhoneGap と 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 の作業の完全なプロジェクトを利用できるようにします。質問がある場合は、以下に投稿してください。

于 2012-10-25T05:35:45.573 に答える
0

問題は、ファイル API を使用して、アプリケーションのアセット ディレクトリ内のファイルを読み取ろうとしていることにあります。そのディレクトリは、実際にはファイル システムの一部ではありません。window.requestFileSystem(LocalFileSystem.PERSISTENT, ...) を実行すると、実際には /sdcard (おそらく) が返されます。したがって、「img/china」を読み込もうとすると、そのディレクトリは存在しません。

メイン Java クラスの onCreate メソッドの実行中に、アセット ディレクトリからローカル ファイル システムにファイルをコピーする必要があります。次に、DirectoryReader を使用して、すべてのファイルのリストを取得できます。

または、事前にすべての画像がわかっている場合は、それらすべてをリストする独自の JSON ファイルを作成できます。次に、そのファイルをロードし、すべてのエントリをループして独自のギャラリーを作成できるようにします。

于 2012-10-25T13:40:01.553 に答える