0

わかりました、2 つの部分で構成される電話ギャップ プラグインを実装しようとしています。私はコルドバ 2.0.0 と日食を使用しています。

Java部分は次のとおりです。

package org.apache.cordova;



 import java.io.File;
    import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.cordova.api.Plugin;
import org.apache.cordova.api.PluginResult;
import org.json.JSONArray;

import android.graphics.Bitmap;
import android.os.Environment;
import android.view.View;

public class Screenshot extends Plugin {

    @Override
    public PluginResult execute(String action, JSONArray args, String callbackId) {
        // starting on ICS, some WebView methods
        // can only be called on UI threads
        final Plugin that = this;
        final String id = callbackId;
        super.cordova.getActivity().runOnUiThread(new Runnable() {
            //@Override
            public void run() {
                View view = webView.getRootView();

                view.setDrawingCacheEnabled(true);
                Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
                view.setDrawingCacheEnabled(false);

                try {
                    File folder = new File(Environment.getExternalStorageDirectory(), "Pictures");
                    if (!folder.exists()) {
                        folder.mkdirs();
                    }

                    File f = new File(folder, "screenshot_" + System.currentTimeMillis() + ".png");

                    FileOutputStream fos = new FileOutputStream(f);
                    bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
                    that.success(new PluginResult(PluginResult.Status.OK), id);

                } catch (IOException e) {
                    that.success(new PluginResult(PluginResult.Status.IO_EXCEPTION, e.getMessage()), id);
                }
            }
        });

        PluginResult result = new PluginResult(PluginResult.Status.NO_RESULT);
        result.setKeepCallback(true);
        return result;
    }

}

これがJavaScriptの部分です:

cordova.define("cordova/plugin/screenshot", function(require, exports, module) {
    var exec = require('cordova/exec');

    /**
     * This class exposes the ability to take a Screenshot to JavaScript
     */
    var Screenshot = function() {};

    /**
     * Save the screenshot to the user's Photo Library
     */
    Screenshot.prototype.saveScreenshot = function() {
        exec(null, null, "Screenshot", "saveScreenshot", []);
    };

    var screenshot = new Screenshot();
    module.exports = screenshot;

});

if (!window.plugins) {
    window.plugins = {};
}
if (!window.plugins.screenshot) {
    window.plugins.screenshot = cordova.require("cordova/plugin/screenshot");
}

別のページで別の JavaScript 関数を使用してこれを呼び出そうとしていますが、成功しません。キャンバス上の画像のアンカーを非表示にしてから、次の行を非表示にします。

setTimeout(takeScreenShot,500);

編集- サイモン・マクドナルドの回答の後に作成され、これはJavaScript関数に関連しています:

function takeScreenShot() {
window.plugins.screenshot.saveScreenshot();
}

次の Java 出力:

System.out.println(folder);
System.out.println("screenshot_" + System.currentTimeMillis() + ".png");

次の結果が生成されます。

/mdt/sdcard/Pictures
screenshot_1347893081276.png

編集デバイスの電源を入れ直した後、私が撮ったスクリーンショットが表示され、電話はそれらをキャッシュしているようで、実際には選択したフォルダーに保存していません。

config.xml と Android マニフェストに適切な権限とコード行があることを確認しました。どこが間違っているのか誰にもわかりますか?

4

2 に答える 2

2

コードのどこにも saveScreenshot メソッドを呼び出していません。takeScreenShot メソッドは次のようになります。

function takeScreenShot() {
    window.plugins.screenshot.saveScreenshot();
}

次に、スクリーンショットを「/sdcard/Pictures」に保存する必要があります。これは、次の場合に機能します。

  1. スクリーン ショット プラグインの config.xml にプラグイン行を忘れずに入れました。
  2. これは別のページにあるとおっしゃっていたので、そのページに screenshot.js のスクリプト タグがあることを確認してください。
于 2012-09-17T14:20:11.820 に答える
0

Obsolute Path を試してみましたか?

File sdCard = Environment.getExternalStorageDirectory();
File folder = new File (sdcard.getAbsolutePath() + "Pictures");
于 2012-09-17T15:24:04.657 に答える