随着Android相机捕获Android安全捕获的图像

时间:2012-12-09 19:32:41

标签: android camera android-cursor image-capture

我正在尝试从我的应用程序中打开Android自己的相机应用程序。它正在工作!但是当我想获取类似信息时我遇到了问题,

- 图像ID

- 图像显示名称

- 图像标题

- 图像数据

- 图像大小

- 图像拍摄日期

应该存储在MediaStore.I成功获取图像的路径。之后,我必须得到上面的信息,但当我尝试获取信息时,应用程序抛出异常。

部分我的代码是这样的:

while(cursor.moveToNext())
    {
        Date date = new Date(Long.valueOf(cursor.getString(5)));
        SimpleDateFormat dateF = new SimpleDateFormat("yyyy/MM/dd");
        SimpleDateFormat timeF = new SimpleDateFormat("HH:mm");

        imageListInfo.add(
                cursor.getString(0) + ";" 
                + cursor.getString(1) + ";" 
                + cursor.getString(2) + ";" 
                + cursor.getString(3) + ";" 
                + cursor.getString(4) + ";"
                + dateF.format(date) + ";"
                + timeF.format(date)
                );
    }

在拍摄并保存从我的应用程序调用的默认相机应用程序中拍摄的照片之前,没有任何问题。

我认为有一个问题需要解决。这是如何保存图像的信息,比如在没有从我的应用程序调用的情况下拍摄照片?

编辑:

获取id“cursor.getString(0)”代码

时会发生这种情况
android.database.StaleDataException: Attempting to access a closed CursorWindow.Most probable cause: 
cursor is deactivated prior to calling this method.
at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:139)
at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
at android.database.CursorWrapper.getString(CursorWrapper.java:114)
at com.canberk.data.warehouse.BaseActivity.indexingForImageMediaStore(BaseActivity.java:313)
at com.canberk.data.warehouse.BaseActivity$BackGroundWorker.doInBackground(BaseActivity.java:109)
at com.canberk.data.warehouse.BaseActivity$BackGroundWorker.doInBackground(BaseActivity.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:264)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)

先谢谢

2 个答案:

答案 0 :(得分:2)

  

但是当我想获得应该存储在MediaStore上的信息时,我有一个问题

嗯,当用户直接调用Camera应用程序拍照时,该数据仅在MediaStore。当Intent调用应用程序将照片返回到您的应用程序时,图像数据可能会保存在您请求的位置,但MediaStore中不会隐式存储任何内容。

如果您的应用正在请求照片,一种常见的技巧是首先使用您要关联的所有初始元数据插入MediaStore,这将返回您可以传递给Uri的{​​{1}}用于存储捕获图像的相机应用程序。返回之后,如果您需要输入其他元数据(如图像大小),则可以读取此信息并更新数据库。

答案 1 :(得分:1)

您的堆栈跟踪似乎不言自明:您正在从Cursor访问已关闭的indexingForImageMediaStore()