Android PhoneGapアプリ:自分のコードを使用してカメラが撮影した画像を取得できません(電話ガップではありません)

StackOverflow https://stackoverflow.com/questions/8910443

質問

ノート- 私はPhoneGapを使用しているにもかかわらず、問題はその問題に関するものではありません。

こんにちは、Androidアプリを開発しています。私のアプリはPhoneGap 1.3を使用しています。

MIの問題...
PhoneGap APIを使用して写真を撮ってアプリに表示しています。しかし、何が起こっているのかは、カメラが起動した後にOSがアプリを殺す何らかの理由であるため、写真がクリックされた後、アプリが再起動され、情報が撮影されていないためです。
この問題の回避策として(問題)、アプリでアプリが写真を撮っているときにクラッシュしたかどうか(コードでいくつかのフラグ)をチェックし、クラッシュ後に再起動している場合、カメラが撮影したpic.jpgを取得して表示しようとする場合、アプリ上でアプリを起動すると、PhoneGapプラグインを設計しました。それ。 問題は、適切な画像、またはその点で適切な.jpgファイルを取得できないことです。

MIコード...
PhoneGapは、カメラを起動する意図を持ち、Pic.jpgのURIを渡します。

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);

注 - 上記のコードはファイルからです Camerallauncher.java PhoneGapの。
さて、StartactivityForresultは、上記のコードの「写真」によって作成されたファイルでユーザーがキャプチャする画像を保存すると仮定しています。したがって、カメラが開いている間にOSがアプリを閉じた後でも(参照 - 問題)写真はそこに保管されます。この仮定が間違っている場合、または写真がどこか別の場所に保存されている可能性がある場合は、私を修正してください。
したがって、この仮定を考慮して、PhoneGapが使用するのと同じロジックを使用してこの画像を取得するプラグインを書きました Camerallauncher.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アプリに戻そうとしています。
しかし、何が起こっているのかは、JPGでさえない(開いていない)ABT 150kbの破損したファイルを取得していることです。


カメラを開始したアクティビティが死んだ後にこの方法で画像を取得できるかどうかを教えてください。そして、可能であれば、私は何を間違えているのか。助けてください!

正しい解決策はありません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top