С помощью камеры сделайте снимок, сохраните его локально, а не на SD-карту - PullRequest
2 голосов
/ 25 августа 2011

Как гласит заголовок, я пытаюсь запустить камеру и сделать снимок, который я могу использовать с приложением локально. Это для Motorola Xoom и, по умолчанию, они не поставляются с SD-картами. Или, по крайней мере, те, которые мой клиент рассматривает для покупки, не имеют SD-карт.

Я нашел довольно хороший урок о том, как запустить камеру, и я могу заставить ее запуститься и все, вплоть до нее, физически сохраняя изображение и затем снова используя это изображение.

Множество решений или других учебных пособий, которые я нашел, показывают только, как сохранить на SD-карту, а не в резидентную память или локально для приложения. Похоже, что это можно сделать, но я в тупике. : - /

Ответы [ 3 ]

2 голосов
/ 25 августа 2011

Возможно, вы могли бы загрузить его в ContentProvider, чтобы позже вы могли использовать изображения для чего-либо:

// Add some parameters to the image that will be stored in the Image ContentProvider
int UNIQUE_BUCKET_ID = 1337;
ContentValues values = new ContentValues(7);
values.put(MediaStore.Images.Media.DISPLAY_NAME,"name of the picture");
values.put(MediaStore.Images.Media.TITLE,"Thats the title of the image");
values.put(MediaStore.Images.Media.DESCRIPTION, "Some description");
values.put(MediaStore.Images.Media.BUCKET_DISPLAY_NAME,"Album name"); 
values.put(MediaStore.Images.Media.BUCKET_ID,UNIQUE_BUCKET_ID);
values.put(MediaStore.Images.Media.DATE_TAKEN,System.currentTimeMillis());
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");

// Inserting the image meta data inside the content provider
Uri uri = getContentResolver().insert(MediaStore.Images.Media.INTERNAL_CONTENT_URI, values);

// Filling the real data returned by the picture callback function into the content provider
try {
    OutputStream outStream = getContentResolver().openOutputStream(uri);
    outStream.write(buffer);  // buffer is the data stream returned by the picture callback
    outStream.close();
}catch (Exception e) {
    Log.e(TAG, "Exception while writing image", e);
}
0 голосов
/ 25 августа 2011

Итак, вы должны заметить, что при вызове Environment.getExternalStorageDirectory() это не обязательно соответствует внешнему пространству памяти (то есть и SD-карте) и будет возвращать локальное пространство памяти на устройствах без слотов для SD-карт.

Примечание: не путайте здесь слово «внешний».Этот каталог лучше всего рассматривать как носитель / общее хранилище.Это файловая система, которая может содержать сравнительно большой объем данных и совместно используется всеми приложениями (не применяет разрешения).Традиционно это SD-карта, но она также может быть реализована как встроенное хранилище в устройстве, которое отличается от защищенного внутреннего хранилища и может быть смонтировано как файловая система на компьютере.

http://developer.android.com/reference/android/os/Environment.html#getExternalStorageDirectory()

То же самое относится к Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);

0 голосов
/ 25 августа 2011

Извлечение Activity.getFilesDir () и Activity.getCacheDir () они предоставляют доступ к хранилищу, где хранится приложение. Также проверьте Environment.getExternalStoragePublicDirectory () , external, здесь, означает, что он находится за пределами частных каталогов приложения. Есть несколько других, так что ищите методы API с одинаковыми именами, чтобы найти наиболее подходящий для вас.

...