Intereting Posts
Как реализовать полосу прокрутки с большим пальцем для быстрой прокрутки SearchView не фильтрует в каждом дочернем элементе Tab TabLayout Android Studio 1.2 – несоответствие проектной кодировки по умолчанию Android: вернитесь к предыдущей деятельности Проверьте, пуст ли EditText. Можно ли безопасно использовать идентификатор Android View для нескольких видов деятельности? Иконки в диалоговом окне «Список» Как обеспечить и обрабатывать глубокие ссылки в приложениях cordova / phonegap Android – создать службу, которая работает один раз в день Значение AudioSource для USB-микрофона на Android Android: макетная анимация, например, приложение новостей Inshorts Опция USB Debugging выделена серым цветом Как преобразовать сообщение facebook created_time в часовой пояс пользователя? Comodo SSL: ERR_CERT_AUTHORITY_INVALID на мобильных устройствах Chrome и Opera (Android) Печать с Android на мобильный Bluetooth-принтер с помощью PhoneGap

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

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

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(); } } } 

}

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

Solutions Collecting From Web of "Автоматическая съемка без участия пользователя"

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; } 

}