Android Camera намерена создать два файла - PullRequest
5 голосов
/ 23 декабря 2010

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

private static final int CAMERA_PIC_REQUEST = 1337;  
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.camera);

    //start camera
    values = new ContentValues();
    values.put(MediaStore.Images.Media.TITLE, "New Picture");
    values.put(MediaStore.Images.Media.DESCRIPTION,"From your Camera");
    imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
    image = (ImageView) findViewById(R.id.ImageView01);
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
    startActivityForResult(intent, CAMERA_PIC_REQUEST);


    //save the image buttons
    Button save = (Button) findViewById(R.id.Button01);
    Button close = (Button) findViewById(R.id.Button02);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == CAMERA_PIC_REQUEST && resultCode == RESULT_OK) {
        try{
            thumbnail = MediaStore.Images.Media.getBitmap(getContentResolver(), imageUri);
            image.setImageBitmap(thumbnail);
        }
        catch(Exception e){
            e.printStackTrace();
        }
    }
     else{
         finish();
     }
}

public void myClickHandler(View view) {
    switch (view.getId()) {
    case R.id.Button01:
        finish();
        break;
    case R.id.Button02:
        dicard();
    }
}

private void dicard(){
    getContentResolver().delete(imageUri, null, null);
    finish();
}

1 Ответ

1 голос
/ 23 июня 2011

На некоторых телефонах Android оригинальная фотография хранится в галерее, а миниатюра - только в вашем регионе.Неважно, что вы сделали с оригинальным запросом.У меня есть два разных телефона HTC, и множество других брендов не делают этого.

Я решил это по-другому.Я выполнил запрос каждого элемента в галерее и загрузил идентификаторы BucketID в массив.Я делаю это, когда мое приложение запускает приложение камеры.Когда приложение камеры возвращается, я делаю тот же запрос (с недавно добавленными элементами для экономии времени).Я сравниваю это с моим первоначальным списком и нахожу новый BucketID.Затем я сравниваю размер этого изображения с файлом, который я явно указал в качестве выходного.Если это больше, я копирую это, заменяя то, что у меня было.Затем я удаляю файл и удаляю его из галереи.

Боль в «знаете-что»!

[ПРАВИТЬ] Мне пришлось изменить это снова, когда я обнаружил телефон, который нене храните уникальные идентификаторы сегментов ... Подробнее см. мой пост в ссылке после этого ответа.

...