0

注意-即使我使用phonegap,问题也不在于其中的某个问题

嗨,我正在开发一个安卓应用程序。我的应用程序正在使用 phonegap 1.3。

我的问题...
我使用 phonegap apis 拍照并在我的应用程序中显示它。但是发生的事情是由于某种原因操作系统在相机启动后杀死了我的应用程序,因此在单击照片后,我的应用程序重新启动并且它没有获取所拍照片的信息。
作为解决这个问题(问题)的方法,我设计了一个 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 将用户捕获的图片存储在上述代码中由“照片”创建的文件中。因此,即使在相机打开时操作系统关闭应用程序(参考 -问题),照片也会存储在那里。如果这个假设是错误的,或者照片可能被保存在其他地方,请纠正我。
所以考虑到这个假设,我编写了一个插件,它使用 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 使用的逻辑大致相同。(我已经删除了所有用于发布的异常处理。所以假设没有编译错误。)所以,我基本上是在尝试检索 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 回答