Автоматическая съемка без участия пользователя

Я использовал этот код для захвата изображения с камеры.

package android.takeowneship; import java.io.File; import android.app.Activity; import android.content.ContentValues; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.widget.ImageView; import android.widget.Toast; public class camera extends Activity{ private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100; Uri imageUri; private ImageView imageView; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); //define the file-name to save photo taken by Camera activity String fileName = "new-photo-name.jpg"; //create parameters for Intent with filename ContentValues values = new ContentValues(); values.put(MediaStore.Images.Media.TITLE, fileName); values.put(MediaStore.Images.Media.DESCRIPTION,"Image capture by camera"); //imageUri is the current activity attribute, define and save it for later usage (also in onSaveInstanceState) imageUri = getContentResolver().insert( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); //create new Intent Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE); } protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) { if (resultCode == RESULT_OK) { //use imageUri here to access the image Toast.makeText(this, "picture has been taken"+ imageUri, Toast.LENGTH_SHORT).show(); } else if (resultCode == RESULT_CANCELED) { Toast.makeText(this, "Picture was not taken", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "Picture was not taken", Toast.LENGTH_SHORT).show(); } } } public static File convertImageUriToFile (Uri imageUri, Activity activity) { Cursor cursor = null; try { String [] proj={MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID, MediaStore.Images.ImageColumns.ORIENTATION}; cursor = activity.managedQuery( imageUri, proj, // Which columns to return null, // WHERE clause; which rows to return (all rows) null, // WHERE clause selection arguments (none) null); // Order-by clause (ascending by name) int file_ColumnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); // int orientation_ColumnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.ORIENTATION); if (cursor.moveToFirst()) { // String orientation = cursor.getString(orientation_ColumnIndex); return new File(cursor.getString(file_ColumnIndex)); } return null; } finally { if (cursor != null) { cursor.close(); } } } 

}

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

Android не позволяет делать снимок без отображения окна предварительного просмотра. Поэтому вы должны сделать вид поверхности очень маленьким. Как 1 * 1 пиксель и поместите его в угол любого управления.

Или покажите фиктивный вид поверхности, чтобы сделать это.

 SurfaceView view = new SurfaceView(this); c.setPreviewDisplay(view.getHolder()); c.startPreview(); c.takePicture(shutterCallback, rawPictureCallback, jpegPictureCallback); 

Проверьте (удаленная ссылка) , это и это .

Этот код захватывает изображение с помощью передней камеры и автоматически сохраняет его

 /** Called when the activity is first created. */ @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); int index = getFrontCameraId(); if (index == -1){ Toast.makeText(getApplicationContext(), "No front camera", Toast.LENGTH_LONG).show(); } else { iv_image = (ImageView) findViewById(R.id.imageView); sv = (SurfaceView) findViewById(R.id.surfaceView); sHolder = sv.getHolder(); sHolder.addCallback(this); sHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { parameters = mCamera.getParameters(); mCamera.setParameters(parameters); mCamera.startPreview(); Camera.PictureCallback mCall = new Camera.PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { Uri uriTarget = getContentResolver().insert//(Media.EXTERNAL_CONTENT_URI, image); (Media.EXTERNAL_CONTENT_URI, new ContentValues()); OutputStream imageFileOS; try { imageFileOS = getContentResolver().openOutputStream(uriTarget); imageFileOS.write(data); imageFileOS.flush(); imageFileOS.close(); Toast.makeText(TakePictureActivity.this, "Image saved: " + uriTarget.toString(), Toast.LENGTH_LONG).show(); } catch (FileNotFoundException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); } //mCamera.startPreview(); bmp = BitmapFactory.decodeByteArray(data, 0, data.length); iv_image.setImageBitmap(bmp); } }; mCamera.takePicture(null, null, mCall); } int getFrontCameraId() { CameraInfo ci = new CameraInfo(); for (int i = 0 ; i < Camera.getNumberOfCameras(); i++) { Camera.getCameraInfo(i, ci); if (ci.facing == CameraInfo.CAMERA_FACING_FRONT) return i; } return -1; // No front-facing camera found } @Override public void surfaceCreated(SurfaceHolder holder) { int index = getFrontCameraId(); if (index == -1){ Toast.makeText(getApplicationContext(), "No front camera", Toast.LENGTH_LONG).show(); } else { mCamera = Camera.open(index); Toast.makeText(getApplicationContext(), "With front camera", Toast.LENGTH_LONG).show(); } mCamera = Camera.open(index); try { mCamera.setPreviewDisplay(holder); } catch (IOException exception) { mCamera.release(); mCamera = null; } } @Override public void surfaceDestroyed(SurfaceHolder holder) { mCamera.stopPreview(); mCamera.release(); mCamera = null; } 

}

Intereting Posts
Проект Android / Scala в IntelliJ 14 компилируется, но сбой при запуске не находит Scala class Как удалить нераспознанные символы, которые возвращаются из веб-службы? Принудительный планшет для использования ресурсов xhdpi Как программно установить сертификат CA (для конфигурации EAP WiFi) в Android? Android-виджет не обновляется – имеет неправильный идентификатор виджетов Как изменить расположение экрана в соответствии с ориентацией? Интернационализация в android Динамическое добавление нескольких фрагментов в макет моей активности Получать миллисекунды до полуночи Получение местоположения из фоновой службы, это правильно? Создать имя точки доступа к сети с кодом, Пользовательская кнопка с выдвижным фоном: разница в разнице в Android 4 и Android 2.3 Android Studio java.util.zip.ZipException: дублировать запись Синхронизация iOS / Android с настольным приложением Delphi / C # Вход Android WebView на Android