2011-01-18 5 views
3

Надеюсь, что кто-то может дать некоторые указатели (или правильный ответ) ... Простые приложения, сделайте снимок с помощью встроенного приложения для камеры, сохраните изображение в отдельном приложении. Сделай.Проблемы с камерой для камеры Android

Проблема: приложение камеры сохраняет изображение в местоположении приложения по умолчанию (/ mnt/sdcard/external_sd/DCIM/Camera), а также мой собственный путь (в коде ниже). Оба файла абсолютно одинаковы, кроме имени файла. Файл external_sd (тот, который я хочу удалить) сохраняется с тире (-) по сравнению с моим собственным файловым путем, сохраненным с символами подчеркивания. Размеры файлов точно такие же.

Как остановить эту проблему с двойным изображением? Есть ли дополнительный вариант намерения, которого я не хватает? Или я делаю это совершенно неправильно, чего-то не хватает? Я использую Galaxy S Vibrant.

Фрагмент кода:

private static Uri _outputFileUri; 
private static File _file; 
private ImageView _image; 
private SimpleDateFormat _simpleDateFormat = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss"); 


    _takePicture = (Button) findViewById(R.id.takePicture); 
    _takePicture.setOnClickListener(new OnClickListener() { 

     public void onClick(View v) { 

      _intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);   

      _file = new File(Environment.getExternalStorageDirectory() + 
          "/Android/data/my own folder/files/", 
          _simpleDateFormat.format(new Date()).toString() + 
          ".jpg"); 

      _outputFileUri = Uri.fromFile(_file); 

      _intent.putExtra(MediaStore.EXTRA_OUTPUT, _outputFileUri); 
      startActivityForResult(_intent, CAMERA_ACTIVITY); 
     } 
    }); 


@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (resultCode == RESULT_CANCELED) { 
     Toast.makeText(this, "Activity cancelled", Toast.LENGTH_LONG).show(); 
     return; 
    } 

    switch (requestCode) { 

     case CAMERA_ACTIVITY: 

      if (resultCode == RESULT_OK) { 

       try{ 
        Bitmap b = MediaStore.Images.Media.getBitmap(getContentResolver(), _outputFileUri); 
        _image.setImageBitmap(b); 
        _image.invalidate(); 
       } 
       catch(Exception e){ 
        e.printStackTrace(); 
       } 
      } 
      break; 
    } 
} 

ответ

0

Пожалуйста, удалите следующие строки:

_file = new File(Environment.getExternalStorageDirectory() + 
          "/Android/data/my own folder/files/", 
          _simpleDateFormat.format(new Date()).toString() + 
          ".jpg"); 

      _outputFileUri = Uri.fromFile(_file); 

      _intent.putExtra(MediaStore.EXTRA_OUTPUT, _outputFileUri); 

также обновить код, чтобы получить изображение с намерением:

Bitmap b = (Bitmap) data.getExtras().get("data"); 
_image.setImageBitmap(b); 
_image.invalidate(); 

Этот путь картина Wouldn» t сохраняется на SD-карте или по умолчанию.

+1

Да, я пытался, что и подобное. Проблема заключается в 1) Bitmap b = (Bitmap) data.getExtras(). Get ("data"); возвращает только небольшое уменьшенное крупное изображение (aka thumbnail) и 2) нормальное изображение полного размера по-прежнему сохраняется в местоположении по умолчанию external_sd. – Steve

+0

Я тестировал его в эмуляторе и не сохранял изображение. Для проблемы с размером изображения это похоже на ошибку, пожалуйста, обратитесь к этому сообщению [http://groups.google.com/group/android-developers/browse_thread/thread/94a5df65f96c5fbe) – Vikas

0

У меня была такая же проблема и сдался. Спустя некоторое время я узнал, что больше ничего не получаю, и я не уверен, какое изменение я внес в свой код, но я думаю, что это была ошибка MediaStore (проверьте мой нерешенный вопрос: Weird camera Intent behavior)

Как вы уже URI изображения, почему бы вам не использовать его для установки растрового изображения ImageViews?

// void setImageURI(Uri uri) 
_image.setImageBitmap(_outputFileUri); 
1

Это поведение, зависящее от устройства. Мое замечание заключается в том, что устройства HTC не имеют этой проблемы с дублированием, но Samsung устройства.

0

Я имел этот вопрос, и вот как я ее решил:

File createImageFile() throws IOException{ 

    String timestamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
    String filename = "IMG_"+timestamp+"_"; 
    File image = File.createTempFile(filename,".jpg",mGalleryFolder); 
    if (image.length() == 0){ 
     boolean delete = image.delete(); 
    } 
    mLocation = image.getAbsolutePath(); 
    return image; 
} 

Это точно не решить, но работает для меня;)

Смежные вопросы