public class MainActivity extends Activity {
Camera mCamera;
private SurfaceHolder.Callback mSurfaceListener =
new SurfaceHolder.Callback() {
public void surfaceCreated(SurfaceHolder holder){
mCamera = Camera.open();
try{
mCamera.setPreviewDisplay(holder);
mCamera.setPreviewCallback(new PreviewCallback(){
public void onPreviewFrame(byte[] data, Camera camera){
}
});
} catch(Exception e){
mCamera.release();
mCamera = null;
e.printStackTrace();
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
public void surfaceChanged(SurfaceHolder holder,
int format,
int width,
int height) {
Camera.Parameters parameters = mCamera.getParameters();
List<Size> sizes = parameters.getSupportedPreviewSizes();
Size optimalSize = getOptimalPreviewSize(sizes,width,height);
parameters.setPreviewSize(optimalSize.width, optimalSize.height);
mCamera.setParameters(parameters);
mCamera.startPreview();
}
};
private Size getOptimalPreviewSize(List<Size> sizes, int w,
int h) {
// TODO Auto-generated method stub
final double ASPECT_TOLERANCE= 0.05;
double targetRatio = (double) w / h;
if(sizes == null) return null;
Size optimalSize = null;
double minDiff = Double.MAX_VALUE;
int targetHeight = h;
for(Size size : sizes){
double ratio = (double) size.width / size.height;
if(Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE) continue;
if(Math.abs(size.height - targetHeight) < minDiff){
optimalSize = size;
minDiff = Math.abs(size.height - targetHeight);
}
}
if(optimalSize == null){
minDiff = Double.MAX_VALUE;
for(Size size : sizes){
if(Math.abs(size.height - targetHeight) < minDiff) {
optimalSize = size;
minDiff = Math.abs(size.height - targetHeight);
}
}
}
return optimalSize;
}
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Window win = getWindow();
win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
SurfaceView surface = (SurfaceView) findViewById(R.id.SurfaceView01);
SurfaceHolder holder = surface.getHolder();
holder.addCallback(mSurfaceListener);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
}
이클립스에 코딩작업을하면 오류는 하나도 안뜨는데
run라면 실행이 안되고 액티비티자체도 안켜지고 stopped 라고 뜨네요 ㅜㅜ
왜 그러는건가요?
permission에서 접근 권한도 다 줬어요 ...ㅜㅜ
logcat
10-08 10:19:49.159: W/dalvikvm(635): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
10-08 10:19:49.201: E/AndroidRuntime(635): FATAL EXCEPTION: main
10-08 10:19:49.201: E/AndroidRuntime(635): java.lang.NullPointerException
10-08 10:19:49.201: E/AndroidRuntime(635): at ex.beauty.page01Activity$1.surfaceCreated(page01Activity.java:35)
10-08 10:19:49.201: E/AndroidRuntime(635): at android.view.SurfaceView.updateWindow(SurfaceView.java:543)
10-08 10:19:49.201: E/AndroidRuntime(635): at android.view.SurfaceView.access$000(SurfaceView.java:81)
10-08 10:19:49.201: E/AndroidRuntime(635): at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:169)
10-08 10:19:49.201: E/AndroidRuntime(635): at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:671)
10-08 10:19:49.201: E/AndroidRuntime(635): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1818)
10-08 10:19:49.201: E/AndroidRuntime(635): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:998)
10-08 10:19:49.201: E/AndroidRuntime(635): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4212)
10-08 10:19:49.201: E/AndroidRuntime(635): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
10-08 10:19:49.201: E/AndroidRuntime(635): at android.view.Choreographer.doCallbacks(Choreographer.java:555)
10-08 10:19:49.201: E/AndroidRuntime(635): at android.view.Choreographer.doFrame(Choreographer.java:525)
10-08 10:19:49.201: E/AndroidRuntime(635): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
10-08 10:19:49.201: E/AndroidRuntime(635): at android.os.Handler.handleCallback(Handler.java:615)
10-08 10:19:49.201: E/AndroidRuntime(635): at android.os.Handler.dispatchMessage(Handler.java:92)
10-08 10:19:49.201: E/AndroidRuntime(635): at android.os.Looper.loop(Looper.java:137)
10-08 10:19:49.201: E/AndroidRuntime(635): at android.app.ActivityThread.main(ActivityThread.java:4745)
10-08 10:19:49.201: E/AndroidRuntime(635): at java.lang.reflect.Method.invokeNative(Native Method)
10-08 10:19:49.201: E/AndroidRuntime(635): at java.lang.reflect.Method.invoke(Method.java:511)
10-08 10:19:49.201: E/AndroidRuntime(635): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
10-08 10:19:49.201: E/AndroidRuntime(635): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-08 10:19:49.201: E/AndroidRuntime(635): at dalvik.system.NativeStart.main(Native Method)
이게 다 빨간색이긴해요.... 왜 안되는걸까요?....