Faced with the fact that the code for working with the camera does not work on 5.1.1. How to work with SurfaceView starting from 5.1.1?
public class ViewCamera extends Activity implements OnClickListener { SurfaceView surfaceView; Camera camera; MediaRecorder mediaRecorder; final int CAMERA_ID = 0; File photoFile; File videoFile; String namePhoto = " "; String nameVideo = " "; File pictures; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_camera); pictures = Environment .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); nameVideo = getCurrentTime(); videoFile = new File(pictures, nameVideo + ".3gp"); surfaceView = (SurfaceView) findViewById(R.id.surfaceView); SurfaceHolder holder = surfaceView.getHolder(); holder.addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { try { camera.setPreviewDisplay(holder); camera.startPreview(); } catch (Exception e) { e.printStackTrace(); } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { setCameraDisplayOrientation(CAMERA_ID); } @Override public void surfaceDestroyed(SurfaceHolder holder) { } }); } private String getCurrentTime() { Calendar calendar = Calendar.getInstance(); long milisecond = calendar.getTimeInMillis(); String str = Long.toString(milisecond); return str; } @Override protected void onResume() { super.onResume(); camera = Camera.open(); initSpinners(); } @Override protected void onPause() { super.onPause(); releaseMediaRecorder(); if (camera != null) camera.release(); camera = null; } public void onClickPicture(View view) { camera.takePicture(null, null, new PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { try { namePhoto = getCurrentTime(); photoFile = new File(pictures, namePhoto + ".jpg"); FileOutputStream fos = new FileOutputStream(photoFile); fos.write(data); fos.close(); namePhoto = namePhoto + 1; } catch (Exception e) { e.printStackTrace(); } } }); switch (view.getId()) { case R.id.btnTakePicture: Intent intent = new Intent(ViewCamera.this, MapActivity.class); startActivity(intent); break; } } public void onClickStartRecord(View view) { if (prepareVideoRecorder()) { mediaRecorder.start(); } else { releaseMediaRecorder(); } } public void onClickStopRecord(View view) { if (mediaRecorder != null) { mediaRecorder.stop(); releaseMediaRecorder(); } } private boolean prepareVideoRecorder() { camera.unlock(); mediaRecorder = new MediaRecorder(); mediaRecorder.setCamera(camera); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); mediaRecorder.setProfile(CamcorderProfile .get(CamcorderProfile.QUALITY_HIGH)); mediaRecorder.setOutputFile(videoFile.getAbsolutePath()); mediaRecorder.setPreviewDisplay(surfaceView.getHolder().getSurface()); nameVideo = nameVideo + 1; try { mediaRecorder.prepare(); } catch (Exception e) { e.printStackTrace(); releaseMediaRecorder(); return false; } return true; } private void releaseMediaRecorder() { if (mediaRecorder != null) { mediaRecorder.reset(); mediaRecorder.release(); mediaRecorder = null; camera.lock(); } } void setCameraDisplayOrientation(int cameraId) { // ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ²Π΅ΡΠ½ΡΡ ΡΠΊΡΠ°Π½ ΠΎΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ int rotation = getWindowManager().getDefaultDisplay().getRotation(); int degrees = 0; switch (rotation) { case Surface.ROTATION_0: degrees = 0; break; case Surface.ROTATION_90: degrees = 90; break; case Surface.ROTATION_180: degrees = 180; break; case Surface.ROTATION_270: degrees = 270; break; } int result = 0; // ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΈΠ½ΡΠΎ ΠΏΠΎ ΠΊΠ°ΠΌΠ΅ΡΠ΅ cameraId CameraInfo info = new CameraInfo(); Camera.getCameraInfo(cameraId, info); // Π·Π°Π΄Π½ΡΡ ΠΊΠ°ΠΌΠ΅ΡΠ° if (info.facing == CameraInfo.CAMERA_FACING_BACK) { result = ((360 - degrees) + info.orientation); } else // ΠΏΠ΅ΡΠ΅Π΄Π½ΡΡ ΠΊΠ°ΠΌΠ΅ΡΠ° if (info.facing == CameraInfo.CAMERA_FACING_FRONT) { result = ((360 - degrees) - info.orientation); result += 360; } result = result % 360; camera.setDisplayOrientation(result); } void initSpinners() { // Π¦Π²Π΅ΡΠΎΠ²ΡΠ΅ ΡΡΡΠ΅ΠΊΡΡ // ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ ΡΠ²Π΅ΡΠΎΠ²ΡΡ
ΡΡΡΠ΅ΠΊΡΠΎΠ² final List<String> colorEffects = camera.getParameters() .getSupportedColorEffects(); Spinner spEffect = initSpinner(R.id.spEffect, colorEffects, camera .getParameters().getColorEffect()); // ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π²ΡΠ±ΠΎΡΠ° spEffect.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { Parameters params = camera.getParameters(); params.setColorEffect(colorEffects.get(arg2)); camera.setParameters(params); } @Override public void onNothingSelected(AdapterView<?> arg0) { } }); // Π Π΅ΠΆΠΈΠΌΡ Π²ΡΠΏΡΡΠΊΠΈ // ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅ΠΆΠΈΠΌΠΎΠ² Π²ΡΠΏΡΡΠΊΠΈ final List<String> flashModes = camera.getParameters() .getSupportedFlashModes(); // Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΡΠΏΠΈΠ½Π½Π΅ΡΠ° Spinner spFlash = initSpinner(R.id.spFlash, flashModes, camera .getParameters().getFlashMode()); // ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π²ΡΠ±ΠΎΡΠ° spFlash.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { Parameters params = camera.getParameters(); params.setFlashMode(flashModes.get(arg2)); camera.setParameters(params); } @Override public void onNothingSelected(AdapterView<?> arg0) { } }); } Spinner initSpinner(int spinnerId, List<String> data, String currentValue) { // Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΡΠΏΠΈΠ½Π½Π΅ΡΠ° ΠΈ Π°Π΄Π°ΠΏΡΠ΅ΡΠ° Π΄Π»Ρ Π½Π΅Π³ΠΎ Spinner spinner = (Spinner) findViewById(spinnerId); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, data); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); // ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅ΡΠ΅ΠΌ ΠΊΠ°ΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΠΏΠΈΡΠΊΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠΎΠΉ for (int i = 0; i < data.size(); i++) { String item = data.get(i); if (item.equals(currentValue)) { spinner.setSelection(i); } } return spinner; } @Override public void onClick(View arg0) { // TODO Auto-generated method stub }
}