2013-11-28 6 views
0
package com.example.preview; 

import android.app.Activity; 
import android.hardware.Camera; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 
import android.view.View; 
import android.widget.Button; 


public class MainActivity extends Activity implements SurfaceHolder.Callback 
{ 
Button start,stop; 
Camera camera; 
private final String tag = "VideoServer"; 
SurfaceView surfaceView; 
SurfaceHolder surfaceHolder; 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    start = (Button)findViewById(R.id.button1); 
    start.setOnClickListener(new Button.OnClickListener() 
    { 
     public void onClick(View arg0) 
     { 
      start_camera(); 
     } 
    }); 

    stop = (Button)findViewById(R.id.button2); 
    stop.setOnClickListener(new Button.OnClickListener() 
    { 
     public void onClick(View arg0) 
     { 
     stop_camera(); 
     } 
    }); 
    surfaceView = (SurfaceView)findViewById(R.id.surfaceView1); 
    surfaceHolder = surfaceView.getHolder(); 
    surfaceHolder.addCallback(this); 
    // surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
} 


     private void start_camera() 
     { 

      try 
      { 
       camera = Camera.open(); 
      } 
      catch(RuntimeException e) 
      { 
       Log.e(tag, "init_camera: " + e); 
       return; 
      } 
      Camera.Parameters param; 
      param = camera.getParameters(); 
      //modify parameter 
      //param.setPreviewFrameRate(20); 
      param.setPreviewSize(176,144); 
      camera.setParameters(param); 
      try 
       { 
       camera.setPreviewDisplay(surfaceHolder); 
       camera.startPreview(); 
       } 
      catch (Exception e) 
      { 
       Log.e(tag, "init_camera: " + e); 
       return; 
       } 
      } 

     private void stop_camera() 
     { 
     camera.stopPreview(); 
     camera.release(); 
     } 
     public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) { 
      // TODO Auto-generated method stub 
      } 

      public void surfaceCreated(SurfaceHolder holder) { 
      // TODO Auto-generated method stub 
      } 

      public void surfaceDestroyed(SurfaceHolder holder) { 
      // TODO Auto-generated method stub 

} 

}андроид: камера предварительного просмотра с помощью SurfaceView

Это код только для предварительного просмотра по нажатию кнопки запуска. Но есть некоторая ошибка. При нажатии на предварительный просмотр остановлено. Любые предложения от кого-то будут заметны. Я добавил все разрешения, которые требуются. Тем не менее он не работает

ошибка LogCat

11-28 11:01:49.621: E/AndroidRuntime(3558): FATAL EXCEPTION: main 
11-28 11:01:49.621: E/AndroidRuntime(3558): java.lang.NullPointerException 
11-28 11:01:49.621: E/AndroidRuntime(3558):  at com.example.preview.MainActivity.start_camera(MainActivity.java:64) 
11-28 11:01:49.621: E/AndroidRuntime(3558):  at com.example.preview.MainActivity.access$0(MainActivity.java:51) 
11-28 11:01:49.621: E/AndroidRuntime(3558):  at com.example.preview.MainActivity$1.onClick(MainActivity.java:32) 
11-28 11:01:49.621: E/AndroidRuntime(3558):  at android.view.View.performClick(View.java:3511) 
11-28 11:01:49.621: E/AndroidRuntime(3558):  at android.view.View$PerformClick.run(View.java:14109) 
11-28 11:01:49.621: E/AndroidRuntime(3558):  at android.os.Handler.handleCallback(Handler.java:605) 
11-28 11:01:49.621: E/AndroidRuntime(3558):  at android.os.Handler.dispatchMessage(Handler.java:92) 
11-28 11:01:49.621: E/AndroidRuntime(3558):  at android.os.Looper.loop(Looper.java:137) 
11-28 11:01:49.621: E/AndroidRuntime(3558):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
11-28 11:01:49.621: E/AndroidRuntime(3558):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-28 11:01:49.621: E/AndroidRuntime(3558):  at java.lang.reflect.Method.invoke(Method.java:511) 
11-28 11:01:49.621: E/AndroidRuntime(3558):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
11-28 11:01:49.621: E/AndroidRuntime(3558):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
11-28 11:01:49.621: E/AndroidRuntime(3558):  at dalvik.system.NativeStart.main(Native Method) 
+1

вставить LogCat так что мы можем легко обнаружить ошибки –

+0

http://www.coderzheaven.com/2011/12/28/how-to-create-a-custom-layout-for-your -camera-in-android/- посмотрите на этот код. –

ответ

0

Вы установите разрешение в вашем AndroidManifest.xml?

// разрешение для камеры

Update: Используйте ответ на Narendra Pal на этом SO- Camera Tutorial for Android (using surfaceview)

На устройствах без задней панели камеры Camera.open() returns null. Попробуйте Camera.open(0), чтобы получить переднюю камеру. Если вы используете эмулятор, убедитесь, что вы включили камеру для своего эмулятора.

+0

Я добавил все те – Aswathy

+0

что находится на 'MainActivity.java: 64'? – Yup

+0

Проверьте код таким образом http://stackoverflow.com/questions/12273976/camera-tutoial-for-android-using-surfaceview#12274334 – Yup

0

Из этого можно догадаться, что пример Camera, который вы получили по телефону CAmera.open(), - null. Вы получаете какое-то исключение в своем блоке catch здесь?

try 
{ 
camera = Camera.open(); 
} 
catch(RuntimeException e) 
{ 
Log.e(tag, "init_camera: " + e); 
return; 
} 
+0

При запуске на экране появляется сообщение об ошибке« Предварительный просмотр закрыт ». Это все, что я могу видеть – Aswathy

+0

@ user3040168 Вставить точку отладки в' camera = Camera.open(); 'statement и запустите приложение в режиме отладки. Когда вы нажмете на точку останова, нажмите F6, а затем проверьте, что указатель отладки переходит в блок catch или в оператор после блока catch. – d3m0li5h3r

+0

Я получил это ... это была та же линия ... я изменил API 8 до 9 и дал идентификатор ... РАБОТАЕТ !!! – Aswathy

Смежные вопросы