2017-01-21 3 views
2

Я прошел через несколько документов и стеки, однако я не совсем уверен, как я это реализовать ...Использование камеры для съемки фото и сохранить в галерею

И помочь или выборочные коды действительно помогло бы мне понять, Больше.

Ниже приведены комплекты кодов, которыми управляет камера, и она работает отлично, мой следующий вопрос: как мне его автоматически сохранить в галерее телефона?

@Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_home); 
     tvCameraTiles = (TextView) findViewById(R.id.tvCameraTiles); 

     tvCameraTiles.setOnClickListener(new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       dispatchTakePictureIntent(); 
      } 
     }); 
    } 

    private void dispatchTakePictureIntent() 
    { 
     Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

     if (takePictureIntent.resolveActivity(getPackageManager()) != null) 
     { 
      startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); 
     } 
    } 


    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
     if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) 
     { 
      //Get Camera Image File Data 
//   Bundle extras = data.getExtras(); 
//   Bitmap imageBitmap = (Bitmap) extras.get("data"); 
//   mImageView.setImageBitmap(imageBitmap); 
     } 
    } 
+0

Если это работает отлично, то где вы можете увидеть сделанные снимки? – greenapps

+0

@greenapps нет где, поскольку все, что он делает, возвращает результат активности, поэтому изображение не будет сохранено. –

+0

Это нормально, что он возвращается к результату активности. Это происходит всегда. Кто скажет вам, что изображение не сохраняется? То, что вы не видите его в приложении «Галерея», не совпадает с тем, что он не сохраняется где-то. – greenapps

ответ

0

Сначала файл будет создан, и ByteStream будет записан в файл и сохранен. вы не делаете ничего, чтобы этот файл присутствовал в галерее. Это автоматически обновится галереей.

+0

Mhm, ну, я использую Redmi Note 4, чтобы проверить свой продукт, и, похоже, он, похоже, не появился в моей галерее. –

+0

напишите мне путь, в котором было сохранено изображение. если вы сохранили некоторую временную папку, галерея не будет отображаться. попытайтесь опубликовать путь к файлу изображения. – Noorul

2

Вы прочитали это https://developer.android.com/training/camera/photobasics.html?

Особенно часть:

private void galleryAddPic() { 
    Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); 
    File f = new File(mCurrentPhotoPath); 
    Uri contentUri = Uri.fromFile(f); 
    mediaScanIntent.setData(contentUri); 
    this.sendBroadcast(mediaScanIntent); 
} 

Вам не кажется, чтобы сохранить фото во внешнем хранилище, поэтому он должен работать.

EDIT: Я попытался сделать действительно основное приложение, следуя документации с помощью метода galleryAddPic.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button photoButton = (Button) findViewById(R.id.photobutton); 
    photoButton.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      dispatchTakePictureIntent(); 
     } 
    }); 
} 

static final int REQUEST_IMAGE_CAPTURE = 1; 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { 
     //Bundle extras = data.getExtras(); 
     //Bitmap imageBitmap = (Bitmap) extras.get("data"); 
     //mImageView.setImageBitmap(imageBitmap); 
     galleryAddPic(); 
    } 
} 

String mCurrentPhotoPath; 

private File createImageFile() throws IOException { 
    File storageDir = Environment.getExternalStorageDirectory(); 
    File image = File.createTempFile(
      "example", /* prefix */ 
      ".jpg",   /* suffix */ 
      storageDir  /* directory */ 
    ); 
    mCurrentPhotoPath = image.getAbsolutePath(); 
    return image; 
} 

private void dispatchTakePictureIntent() { 
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) { 
     File photoFile = null; 
     try { 
      photoFile = createImageFile(); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
     if (photoFile != null) { 
      takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile)); 
      startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); 
     } 
    } 
} 

private void galleryAddPic() { 
    Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); 
    File f = new File(mCurrentPhotoPath); 
    Uri contentUri = Uri.fromFile(f); 
    mediaScanIntent.setData(contentUri); 
    this.sendBroadcast(mediaScanIntent); 
} 

Это работает на меня! Я делаю снимок с помощью приложения для камеры, а затем он отображается в приложении галереи. Я изменил код относительно части FileProvider, теперь он передает Uri с помощью метода Uri.fromFile (photoFile). Я также сохраняю фотографию в другом месте, проверяю код в методе createImageFile для этого.

В эмуляторе Android Studio работает нормально, дайте мне знать о вас.

+0

Привет, я прочитал эту документацию, однако я просто не могу понять, где я могу получить переменную -> mCurrentPhotoPath –

+0

mCurrentPhotoPath - глобальная переменная. В примере, указанном в документации, устанавливается при создании временного файла. –

+0

Привет У меня ошибка с этим набором кодов -> –

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