Nano Hash - криптовалюты, майнинг, программирование

Делаем снимок с помощью намерения камеры в Android

Я использую следующий код для нажатия фотографии при нажатии кнопки.

package com.example.clickpic;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity {
int TAKE_PHOTO_CODE = 0;
public static int count=0;
private ImageView imageView;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

//here,we are making a folder named picFolder to store pics taken by the camera using  this application
    final String dir =  Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) +  "/picFolder/"; 
    File newdir = new File(dir); 
    newdir.mkdirs();
    this.imageView = (ImageView)this.findViewById(R.id.imageView1);
  Button capture = (Button) findViewById(R.id.btnCapture);
  capture.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {

        // here,counter will be incremented each time,and the picture taken by camera  will be stored as 1.jpg,2.jpg and likewise.
        count++;
        String file = dir+count+".jpg";
        File newfile = new File(file);
        try {
            newfile.createNewFile();
        } catch (IOException e) {}       

        Uri outputFileUri = Uri.fromFile(newfile);

        Intent cameraIntent = new  Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
        startActivityForResult(cameraIntent, 1888); 
    }
});
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    if (requestCode == 1888 && resultCode == RESULT_OK) {  
        Bitmap photo = (Bitmap) data.getExtras().get("data"); 
        imageView.setImageBitmap(photo);
    }  
} 

} 

Код работает отлично, но он просто открывает активность камеры. Что я должен сделать, чтобы при нажатии кнопки он щелкал изображение и сохранял его?

Прямо сейчас это просто открывает приложение камеры телефона и ожидает, что я щелкну изображение и нажму «ОК». Я не хочу этих вещей.

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

Редактировать

Я уже пытался создать собственное приложение для камеры, но столкнулся с некоторыми проблемами. Вот почему я пробую этот подход. API камеры не работает на KITKAT


  • Затем рассмотрите возможность создания собственной активности камеры. 26.03.2014
  • Я тоже пытался это сделать... но столкнулся с некоторыми проблемами stackoverflow.com/questions/22625904/. Пожалуйста, помогите мне решить это 26.03.2014

Ответы:


1

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

Это не достигается с помощью намерения камеры, например android.provider.MediaStore.ACTION_IMAGE_CAPTURE. Вы должны реализовать часть интерфейса камеры в своем коде без использования собственного приложения камеры устройства.

Взгляните на часть приложения камеры.

26.03.2014
  • Я тоже пытался это сделать... но столкнулся с некоторыми проблемами stackoverflow.com/questions/22625904/…. Пожалуйста, помогите мне решить это 26.03.2014
  • Этот пост также может помочь androideasylessons.blogspot.in /2012/09/ 26.03.2014
  • Также developer.android.com/training/camera/cameradirect.html и tutorialspoint.com/android/android_camera.htm 26.03.2014
  • Просто следуйте инструкциям, приведенным в сообщениях, и вы обязательно сможете создать свое приложение для камеры. 26.03.2014

  • 2

    Я написал класс камеры, который делает снимки, упорядочивает ориентацию (некоторые устройства по умолчанию фотографируют горизонтально) и сохраняет сделанные фотографии. Вы можете проверить это по ссылке ниже:

    Ориентация захвата камеры на устройствах Samsung в Android

    Редактировать: извините, функции savePhoto не написаны в моем примере. Добавление их сейчас.

    функция сохранения фото:

    public void savePhoto(Bitmap bmp) {
    
        imageFileFolder = new File(Environment.getExternalStorageDirectory(),
                cc.getDirectoryName());
        imageFileFolder.mkdir();
        FileOutputStream out = null;
        Calendar c = Calendar.getInstance();
        String date = fromInt(c.get(Calendar.MONTH))
                + fromInt(c.get(Calendar.DAY_OF_MONTH))
                + fromInt(c.get(Calendar.YEAR))
                + fromInt(c.get(Calendar.HOUR_OF_DAY))
                + fromInt(c.get(Calendar.MINUTE))
                + fromInt(c.get(Calendar.SECOND));
        imageFileName = new File(imageFileFolder, date.toString() + ".jpg");
        try {
            out = new FileOutputStream(imageFileName);
            bmp.compress(Bitmap.CompressFormat.JPEG, 70, out);
            out.flush();
            out.close();
            scanPhoto(imageFileName.toString());
            out = null;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    

    функция сканирования фото:

    public void scanPhoto(final String imageFileName) {
        geniusPath = imageFileName;
        msConn = new MediaScannerConnection(MyClass.this,
                new MediaScannerConnectionClient() {
                    public void onMediaScannerConnected() {
                        msConn.scanFile(imageFileName, null);
    
                    }
    
                    @Override
                    public void onScanCompleted(String path, Uri uri) {
    
                        msConn.disconnect();
    
                    }
                });
        msConn.connect();
    }
    

    Класс SavePhotoTask:

    class SavePhotoTask extends AsyncTask<byte[], String, String> {
        @Override
        protected String doInBackground(byte[]... jpeg) {
            File photo = new File(Environment.getExternalStorageDirectory(),
                    "photo.jpg");
            if (photo.exists()) {
                photo.delete();
            }
            try {
                FileOutputStream fos = new FileOutputStream(photo.getPath());
                fos.write(jpeg[0]);
                fos.close();
            } catch (java.io.IOException e) {
            }
            return (null);
        }
    }
    
    26.03.2014
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..