0

注-電話ギャップを使用していますが、問題はその問題に関するものではありません。

こんにちは、アンドロイドアプリを開発しています。私のアプリは phonegap 1.3 を使用しています。

miの問題...
phonegap APIを使用して写真を撮り、アプリに表示しています。しかし、何が起こっているのかは、カメラの起動後にOSがアプリを強制終了するため、写真がクリックされた後にアプリが再起動され、撮影した写真に関する情報が取得されないためです。
この問題 (問題) の回避策として、アプリの開始時に写真の撮影中にアプリがクラッシュしたかどうかをチェックし (コード内のいくつかのフラグ)、クラッシュ後に再起動している場合は、Pic を取得する phonegap プラグインを設計しました。 jpg をカメラで撮影し、表示しようとします。問題は、適切な画像、または適切な .jpg ファイルを取得できないことです。

mi コード...
Phonegap は、カメラを開始するインテントを作成し、作成した Pic.jpg の uri をそのインテントに渡し、startActivityForResult に渡します。

Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
File photo = new File(DirectoryManager.getTempDirectoryPath(ctx),  "Pic.jpg");
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));
this.imageUri = Uri.fromFile(photo);
this.ctx.startActivityForResult((Plugin) this, intent, 0);

注 - 上記のコードは、PhonegapのCameraLauncher.javaファイルからのものです。
ここで、startActivityForResult は、ユーザーがキャプチャした画像を、上記のコードの「photo」によって作成されたファイルに保存すると想定しています。したがって、カメラが開いている間にOSがアプリを閉じた後でも(問題を参照)、写真はそこに保存されます。この仮定が間違っている場合、または写真が別の場所に保存されている可能性がある場合は、修正してください。
したがって、この仮定を考慮して、PhonegapがCameraLauncher.javaで使用するのと同じロジックを使用してこの画像を取得するプラグインを作成しました


Uri imageUri;
ExifHelper exif = new ExifHelper();
exif.createInFile(getTempDirectoryPath(ctx) + "/Pic.jpg");
exif.readExifData();
File photo = new File(getTempDirectoryPath(ctx),  "Pic.jpg");
imageUri = Uri.fromFile(photo);

Bitmap bitmap = null;

bitmap = android.provider.MediaStore.Images.Media.getBitmap(this.ctx.getContentResolver(), imageUri);


ContentValues values = new ContentValues();
values.put(android.provider.MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
Uri uri = null;
try {
     uri = this.ctx.getContentResolver().insert(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
} catch (UnsupportedOperationException e) {
     uri = this.ctx.getContentResolver().insert(android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI, values);
}

// Add compressed version of captured image to returned media store Uri

OutputStream os = this.ctx.getContentResolver().openOutputStream(uri);
bitmap.compress(Bitmap.CompressFormat.JPEG, 20, os);
os.close();

exif.createOutFile(getRealPathFromURI(uri, this.ctx));
exif.writeExifData();

bitmap.recycle();
bitmap = null;
System.gc();
result = new PluginResult(Status.OK, uri.toString());   

これは、Phonegap が使用するロジックとほぼ同じです。(投稿のためにすべての例外処理 n すべてを削除しました。したがって、コンパイル エラー n すべてがないと仮定します。)基本的に、Pic.jpg を取得して phonegap アプリに返そうとしています。
しかし、何が起こっているのかというと、約 150kb の破損したファイルが jpg でさえない (開かない) ということです。


カメラを起動したアクティビティが終了した後、この方法で画像を取得することさえ可能かどうか教えてください。そして、それが可能であれば、私は何を間違っていますか。助けてください!

4

2 に答える 2

1

他のSOの質問で述べたように、

カメラを開いたときにメモリ不足が原因でphonegap androidアプリがクラッシュする

問題は、おそらくカメラの意図のソニーの実装です。サード パーティ製のカメラ アプリを追加してテストし、写真を撮るときにそのアプリを選択して、それでもクラッシュするかどうかを確認してください。おそらくそうではありません。

于 2012-01-18T19:21:21.870 に答える
0

ここでの問題は、Phonegap の FileTransfer プラグインの一部のコードが変更されたためです。上記のコードのみを使用して、クラッシュ後にアプリを再起動した後、カメラで撮影した画像を取得できました。:)

于 2012-02-23T10:11:36.703 に答える