2017-02-03 3 views
-1

Я создаю приложение, которое открывает камеру в качестве фона при запуске приложения, похожее на snapchat. Код, который я использую в настоящее время, содержит устаревшие фрагменты, и я не знаю, как их исправить. Любая помощь приветствуется. Мой код ниже.Открывает камеру, когда приложение запускает

public class CameraView extends SurfaceView implements SurfaceHolder.Callback { 

private SurfaceHolder mHolder; 
private Camera mCamera; 

public CameraView(Context context, Camera camera) { 

    super(context); 
    mCamera = camera; 
    mCamera.setDisplayOrientation(90); 
    //get the holder and set this class as the callback, so we can get camera data here 
    mHolder = getHolder(); 
    mHolder.addCallback(this); 
    mHolder.setType(SurfaceHolder.SURFACE_TYPE_NORMAL); 
} 

public CameraView(Launcher launcher, android.hardware.Camera mCamera) { 
    super(launcher, (AttributeSet) mCamera); 
} 

@Override 
public void surfaceCreated(SurfaceHolder surfaceHolder) { 
    try{ 
     //when the surface is created, we can set the camera to draw images in this surfaceholder 
     mCamera.setPreviewDisplay(surfaceHolder); 
     mCamera.startPreview(); 
    } catch (IOException e) { 
     Log.d("ERROR", "Camera error on surfaceCreated " + e.getMessage()); 
    } 
} 

@Override 
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i2, int i3) { 
    //before changing the application orientation, you need to stop the preview, rotate and then start it again 
    if(mHolder.getSurface() == null)//check if the surface is ready to receive camera data 
     return; 

    try{ 
     mCamera.stopPreview(); 
    } catch (Exception e){ 
     //this will happen when you are trying the camera if it's not running 
    } 

    //now, recreate the camera preview 
    try{ 
     mCamera.setPreviewDisplay(mHolder); 
     mCamera.startPreview(); 
    } catch (IOException e) { 
     Log.d("ERROR", "Camera error on surfaceChanged " + e.getMessage()); 
    } 
} 

@Override 
public void surfaceDestroyed(SurfaceHolder surfaceHolder) { 
    mCamera.stopPreview(); 
    mCamera.release(); 
} 

Проблема в том, что эти строки устарели.

mCamera.setDisplayOrientation(90); 
mCamera.setPreviewDisplay(surfaceHolder); 
mCamera.startPreview(); 
mCamera.stopPreview(); 
mCamera.release(); 

Мой Xml находится ниже.

<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity"> 

    <FrameLayout 
     android:id="@+id/camera_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

    </FrameLayout> 

</FrameLayout> 
+1

Его единственный устаревший. Это не значит, что это не будет работать. Используйте «Camera2 API», если вы хотите использовать последний код. – Piyush

+0

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

+0

В чем ошибка? – Piyush

ответ

0

У вас есть что-то неправильно в настройках проекта или импорта - старая камера API является устаревшим, но это не мешает ему быть использованы в любом случае.

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

Android Studio может устанавливать предупреждения, но все, если все настроено правильно.