2014-03-21 8 views
0

Я пытаюсь захватить изображение без предварительного просмотра камеры. Я говорил много статей, и некоторые из них являются:FATAL EXCEPTION: java.lang.RuntimeException: takePicture failed

http://cell0907.blogspot.in/2014/01/android-camera-capture-without.html

http://android-er.blogspot.com.es/2010/12/implement-takepicture-function-of.html

Я добавил разрешения для камеры и записи на внешний накопитель.

В xml моей деятельности я использую компонент surfaceView, ширина и высота которого 1dp. Также есть кнопка, и при нажатии этой кнопки необходимо захватить рис. Ниже приведен код для моего файла 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=".CameraActivity" 
    android:background="#000000" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:text="capture" /> 

    <SurfaceView 
     android:id="@+id/surfaceView1" 
     android:layout_width="1dp" 
     android:layout_height="1dp" 
     android:layout_below="@+id/button1" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="78dp" /> 

</RelativeLayout> 

Обратится теперь к указанным выше ссылкам я выполнил следующие действия в соответствующем файле активности:

package com.samplecamera; 

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

    import android.graphics.Bitmap; 
    import android.graphics.BitmapFactory; 
    import android.hardware.Camera; 
    import android.hardware.Camera.CameraInfo; 
    import android.os.Bundle; 
    import android.os.Environment; 
    import android.app.Activity; 
    import android.text.format.DateFormat; 
    import android.view.Menu; 
    import android.view.SurfaceView; 
    import android.view.View; 
    import android.view.View.OnClickListener; 
    import android.widget.Button; 

    public class CameraActivity extends Activity { 

     SurfaceView sv=null; 
     Camera cam=null; 


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

      cam=Camera.open(); 
      sv=(SurfaceView) findViewById(R.id.surfaceView1); 

      try { 
       cam.setPreviewDisplay(sv.getHolder()); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      cam.startPreview(); 
      Camera.Parameters params = cam.getParameters(); 
      params.setJpegQuality(100); 
      cam.setParameters(params); 

      Button btn=(Button) findViewById(R.id.button1); 
      btn.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View arg0) { 
        // TODO Auto-generated method stub 
         cam.startPreview(); 
         cam.takePicture(null, null, mCall); 
       } 
      }); 

     } 

     Camera.PictureCallback mCall = new Camera.PictureCallback() { 
      public void onPictureTaken(byte[] data, Camera camera) { 
       //decode the data obtained by the camera into a Bitmap 
        //display.setImageBitmap(photo); 
       // Bitmap bitmapPicture 
       // = BitmapFactory.decodeByteArray(data, 0, data.length); 
        FileOutputStream fos = null; 
       try { 
        fos = new FileOutputStream(Environment.getExternalStorageDirectory()+"/"+ 
           DateFormat.format("yyyy-MM-dd_kk-mm-ss", new Date().getTime())+".jpeg"); 
       } catch (FileNotFoundException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
        try { 
         fos.write(data); 
        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
        try { 
         fos.flush(); 
         fos.close(); 
        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
      }   
     }; 

     @Override 
     protected void onDestroy() { 
      // TODO Auto-generated method stub 
      cam.release(); 
      super.onDestroy(); 
     } 

     @Override 
     public void onBackPressed() { 
      // TODO Auto-generated method stub 

      super.onBackPressed(); 
     } 
     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
      // Inflate the menu; this adds items to the action bar if it is present. 
      getMenuInflater().inflate(R.menu.camera, menu); 
      return true; 
     } 

    } 

OnClick кнопки я получаю следующее исключение :

03-21 11:55:44.404: E/AndroidRuntime(27544): FATAL EXCEPTION: main 
03-21 11:55:44.404: E/AndroidRuntime(27544): java.lang.RuntimeException: takePicture failed 
03-21 11:55:44.404: E/AndroidRuntime(27544): at android.hardware.Camera.native_takePicture(Native Method) 
03-21 11:55:44.404: E/AndroidRuntime(27544): at android.hardware.Camera.takePicture(Camera.java:1163) 
03-21 11:55:44.404: E/AndroidRuntime(27544): at android.hardware.Camera.takePicture(Camera.java:1108) 
03-21 11:55:44.404: E/AndroidRuntime(27544): at com.samplecamera.CameraActivity$2.onClick(CameraActivity.java:55) 
03-21 11:55:44.404: E/AndroidRuntime(27544): at android.view.View.performClick(View.java:4084) 
03-21 11:55:44.404: E/AndroidRuntime(27544): at android.view.View$PerformClick.run(View.java:16987) 
03-21 11:55:44.404: E/AndroidRuntime(27544): at android.os.Handler.handleCallback(Handler.java:615) 
03-21 11:55:44.404: E/AndroidRuntime(27544): at android.os.Handler.dispatchMessage(Handler.java:92) 
03-21 11:55:44.404: E/AndroidRuntime(27544): at android.os.Looper.loop(Looper.java:137) 
03-21 11:55:44.404: E/AndroidRuntime(27544): at android.app.ActivityThread.main(ActivityThread.java:4802) 
03-21 11:55:44.404: E/AndroidRuntime(27544): at java.lang.reflect.Method.invokeNative(Native Method) 
03-21 11:55:44.404: E/AndroidRuntime(27544): at java.lang.reflect.Method.invoke(Method.java:511) 
03-21 11:55:44.404: E/AndroidRuntime(27544): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809) 
03-21 11:55:44.404: E/AndroidRuntime(27544): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576) 
03-21 11:55:44.404: E/AndroidRuntime(27544): at dalvik.system.NativeStart.main(Native Method) 

Пожалуйста, помогите относительно того же.

+1

который является вашим onClick (CameraActivity.java:55) – Developer

+0

@GauravPandey: Спасибо за ответ. Здесь я поставил весь код. Так как у меня есть только одна кнопка, в приведенном выше примере есть только один onclick. – Zax

+0

проверить эту ссылку http://stackoverflow.com/questions/21723557/java-lang-runtimeexception-takepicture-failed – Developer

ответ

0

Удалить функцию cam.startpreview() от OnClick события и при этом кодирование для медиа-проектов, связанных с пытаются проверить камеру == нуль, а затем двигаться дальше, используя этот код не получит

проникнуть 'зайцем'
+0

Спасибо за ответ. Я попробовал изменения, которые вы мне просили, это не работает. – Zax

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