2013-11-20 2 views
-2

Я новичок в разработке Android. Это приложение для камеры, и оно не содержит ошибок компиляции. Но когда он запускается на эмуляторе, это не сработает. Он дает «, к сожалению, предварительный просмотр остановлен». Затем я проверить его на телефон, который имеет «Android 2.3.6» ОС, то и выдает ошибку «приложение Preview (процесс com.example.preview) неожиданно остановилось. Повторите попытку»«Приложение Android_camera неожиданно остановилось. Повторите попытку». как это исправить?

MainActivity.java 

package com.rrd.perview; 

import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 

import android.hardware.Camera; 
import android.hardware.Camera.PictureCallback; 
import android.hardware.Camera.ShutterCallback; 
import android.os.Bundle; 
import android.app.Activity; 
import android.util.Log; 
//import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.FrameLayout; 

public class MainActivity extends Activity { 

    private static final String TAG = "CameraDemo"; 

    Camera camera; 
    Preview preview; 
    Button buttonClick; 

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

     preview = new Preview(this); 
     ((FrameLayout) findViewById(R.id.preview)).addView(preview); 

     buttonClick = (Button) findViewById(R.id.buttonClick); 
     buttonClick.setOnClickListener(new OnClickListener() {    
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       preview.camera.takePicture(shutterCallback, rawCallback, jpegCallback);    
      } 
     }); 

     Log.d(TAG, "onCreate'd");  
    } 


    ShutterCallback shutterCallback = new ShutterCallback() {   
     public void onShutter() { 
      // TODO Auto-generated method stub 
      Log.d(TAG,"onShutter'd");   
     } 
    }; 

    PictureCallback rawCallback = new PictureCallback() {  
     public void onPictureTaken(byte[] data, Camera camera) { 
      // TODO Auto-generated method stub 
      Log.d(TAG, "onPictureTaken - raw");   
     } 
    }; 

    PictureCallback jpegCallback = new PictureCallback() {  
     public void onPictureTaken(byte[] data, Camera camera) { 
      // TODO Auto-generated method stub 
       FileOutputStream outStream = null; 
      try{ 
       outStream = new FileOutputStream(String.format("/sdcard/%d.jpg", System.currentTimeMillis())); 
       outStream.write(data); 
       outStream.close(); 
       Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length); 
      }catch(FileNotFoundException e){ 
       e.printStackTrace();     
      }catch(IOException e){ 
       e.printStackTrace(); 
      }finally{    
      } 
      Log.d(TAG, "onPictureTaken - jpeg"); 


     } 
    }; 



} 

Preview.java

package com.rrd.perview; 

import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
//import android.R.color; 
//import android.R.string; 
import android.annotation.TargetApi; 
import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.hardware.Camera; 
import android.hardware.Camera.PreviewCallback; 
import android.hardware.Camera.CameraInfo; 
import android.os.Build; 
//import android.os.Environment; 
import android.util.Log; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 

class Preview extends SurfaceView implements SurfaceHolder.Callback{ 

    private static final String TAG = "Preview"; 
    SurfaceHolder mHolder; 
    public Camera camera; 

    //@SuppressWarnings("deprecation") 
    Preview (Context context){ 
     super(context); 

     mHolder = getHolder(); 
     mHolder.addCallback(this); 
     //mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
    } 

    @TargetApi(Build.VERSION_CODES.GINGERBREAD) 
    @Override 
    public void surfaceCreated(SurfaceHolder holder) { 
     // TODO Auto-generated method stub 
     Camera.open(CameraInfo.CAMERA_FACING_BACK); 
     try { 
      camera.setPreviewDisplay(holder); 

      camera.setPreviewCallback(new PreviewCallback() { 


       public void onPreviewFrame(byte[] data, Camera camera) { 
        // TODO Auto-generated method stub 
        FileOutputStream outStream = null; 

        try{ 
        outStream = new FileOutputStream(String.format("/sdcard/%d.jpg",System.currentTimeMillis())); 
        outStream.write(data); 
        outStream.close(); 
        Log.d(TAG,"onPreviewFrame - wrote bytes: "+ data.length); 

        } catch(FileNotFoundException e){ 
         e.printStackTrace();       
        } catch(IOException e){ 
         e.printStackTrace(); 
        }finally{ 

        } 
        Preview.this.invalidate();     

       } 
      }); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 

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

     camera.stopPreview(); 
     camera = null;  
    } 

    @Override 
    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 
     // TODO Auto-generated method stub 
     Camera.Parameters parameters = camera.getParameters(); 
     parameters.setPreviewSize(w, h); 
     camera.setParameters(parameters); 
     camera.startPreview(); 

    } 

    public void drow(Canvas canvas){ 
     super.draw(canvas); 
     Paint p = new Paint(Color.RED); 
     Log.d(TAG, "drow"); 
     canvas.drawText("Preview",canvas.getWidth()/2,canvas.getHeight()/2, p); 
    } 




} 


activity_main.xml 

    <RelativeLayout 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" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity" > 

    <FrameLayout android:id="@+id/preview" 
     android:layout_weight="1" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 
</FrameLayout> 

    <Button android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/buttonClick" 
     android:text="Click" android:layout_gravity="center">   
    </Button> 

</RelativeLayout> 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.rrd.perview" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="17" /> 
    <uses-permission android:name="android.permission.CAMERA"/> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.rrd.perview.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

LogCat

11-20 05:02:23.974: D/CameraDemo(1075): onCreate'd 
11-20 05:02:24.804: D/AndroidRuntime(1075): Shutting down VM 
11-20 05:02:24.804: W/dalvikvm(1075): threadid=1: thread exiting with uncaught exception (group=0xb1b0ab90) 
11-20 05:02:24.884: E/AndroidRuntime(1075): FATAL EXCEPTION: main 
11-20 05:02:24.884: E/AndroidRuntime(1075): Process: com.rrd.perview, PID: 1075 
11-20 05:02:24.884: E/AndroidRuntime(1075): java.lang.NullPointerException 
11-20 05:02:24.884: E/AndroidRuntime(1075):  at com.rrd.perview.Preview.surfaceCreated(Preview.java:43) 
11-20 05:02:24.884: E/AndroidRuntime(1075):  at android.view.SurfaceView.updateWindow(SurfaceView.java:572) 
11-20 05:02:24.884: E/AndroidRuntime(1075):  at android.view.SurfaceView.access$000(SurfaceView.java:86) 
11-20 05:02:24.884: E/AndroidRuntime(1075):  at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:175) 
11-20 05:02:24.884: E/AndroidRuntime(1075):  at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:847) 
11-20 05:02:24.884: E/AndroidRuntime(1075):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1869) 
11-20 05:02:24.884: E/AndroidRuntime(1075):  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:998) 
11-20 05:02:24.884: E/AndroidRuntime(1075):  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5582) 
11-20 05:02:24.884: E/AndroidRuntime(1075):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749) 
11-20 05:02:24.884: E/AndroidRuntime(1075):  at android.view.Choreographer.doCallbacks(Choreographer.java:562) 
11-20 05:02:24.884: E/AndroidRuntime(1075):  at android.view.Choreographer.doFrame(Choreographer.java:532) 
11-20 05:02:24.884: E/AndroidRuntime(1075):  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735) 
11-20 05:02:24.884: E/AndroidRuntime(1075):  at android.os.Handler.handleCallback(Handler.java:733) 
11-20 05:02:24.884: E/AndroidRuntime(1075):  at android.os.Handler.dispatchMessage(Handler.java:95) 
11-20 05:02:24.884: E/AndroidRuntime(1075):  at android.os.Looper.loop(Looper.java:137) 
11-20 05:02:24.884: E/AndroidRuntime(1075):  at android.app.ActivityThread.main(ActivityThread.java:4998) 
11-20 05:02:24.884: E/AndroidRuntime(1075):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-20 05:02:24.884: E/AndroidRuntime(1075):  at java.lang.reflect.Method.invoke(Method.java:515) 
11-20 05:02:24.884: E/AndroidRuntime(1075):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777) 
11-20 05:02:24.884: E/AndroidRuntime(1075):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593) 
11-20 05:02:24.884: E/AndroidRuntime(1075):  at dalvik.system.NativeStart.main(Native Method) 
11-20 05:03:03.864: I/Process(1075): Sending signal. PID: 1075 SIG: 9 
+0

Somthing является нулевым в ** ** ваш код (Preview.java:43) ... отладить – Selvin

ответ

0

Что вы хотите сказать? что ты уже испробовал? Пара точек, чтобы иметь в виду:

  • при использовании камеры, вы должны объявить «android.permission.CAMERA» в манифесте - не видели, что в вашем
  • у вас есть java.lang. NullPointerException, пожалуйста, проверьте, какая линия вызывает
  • в вашем surfaceCreated(), вы делаете это:

    Camera.open (CameraInfo.CAMERA_FACING_BACK);

, а затем вы используете объект камеры, который не инициализирован! Измените приведенное выше значение:

camera = Camera.open(CameraInfo.CAMERA_FACING_BACK); 

и проверьте наличие RuntimeException, которое может возникнуть при открытии камеры.

Пожалуйста, проверьте класс Android Обучение относительно камеры, контролирующей:

http://developer.android.com/training/camera/cameradirect.html

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