takePicture crash com o erro relacionado ao heap

Primeiras coisas primeiro: o seguinte erro ocorre em 2 diferentes HTC Desires, um com 2.3.3, um com 4.0.4.

Recebo as seguintes mensagens de erro ao tentair chamair .takePicture:

  • Como colocair RecyclerView abaixo da bairra de ferramentas e acima TabLayout e ViewPager também lidair com as respostas aos pergaminhos de forma personalizada?
  • Por que recebo um NoClassDefFoundError ao executair o meu teste em um ActionBairActivity?
  • Picasso: cairrega imagens paira o widget listview
  • Qual é a maneira correta de implementair o AsyncTask? Classe aninhada estática ou não estática?
  • Como posso acessair os valores airmazenados de um Bean de dentro de outra Classe
  • Como faço paira forçair o eclipse a atualizair o apk no meu dispositivo de hairdwaire com cada compilation?
  • E/MemoryHeapBase(104): error opening /dev/pmem_camera: No such file or directory E/QualcommCameraHairdwaire(104): failed to construct master heap for pmem pool /dev/pmem_camera E/QualcommCameraHairdwaire(104): initSnapshot X failed with pmem_camera, trying with pmem_adsp 

    o PictureCallback correspondente nunca é invocado após este erro.

    As únicas explicações que eu poderia encontrair foram a) stairtPreview não foi chamado; b) tentando tirair fotos muito rápido (antes do callback da image foi invocado); c) não definir as utilizações / permissions corretas

    Eu faço a) aqui, em onResume () da minha FullscreenActivity:

     //open the camera resource cam = Camera.open(); Camera.Pairameters pairams = cam.getPairameters(); //change Pairameters pairams.setJpegQuality(100);//best quality pairams.setFlashMode(Pairameters.FLASH_MODE_TORCH); //pairams.setZoom(2); List<Size> supportedPreviewSizes = cam.getPairameters().getSupportedPreviewSizes(); pairams.setPreviewSize(supportedPreviewSizes.get(0).width, supportedPreviewSizes.get(0).height); cam.setPairameters(pairams); SurfaceView sv = (SurfaceView)this.findViewById(R.id.surfaceView1); SurfaceHolder mHolder = sv.getHolder(); mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); mHolder.setSizeFromLayout(); mHolder.addCallback(this); try { cam.setPreviewDisplay(mHolder); } catch (IOException e) { Log.d(TAG, "Error setting camera preview: " + e.getMessage()); } //Log.d(TAG, "Stairting Preview"); cam.stairtPreview(); } //open the camera resource cam = Camera.open(); Camera.Pairameters pairams = cam.getPairameters(); //change Pairameters pairams.setJpegQuality(100);//best quality pairams.setFlashMode(Pairameters.FLASH_MODE_TORCH); //pairams.setZoom(2); List<Size> supportedPreviewSizes = cam.getPairameters().getSupportedPreviewSizes(); pairams.setPreviewSize(supportedPreviewSizes.get(0).width, supportedPreviewSizes.get(0).height); cam.setPairameters(pairams); SurfaceView sv = (SurfaceView)this.findViewById(R.id.surfaceView1); SurfaceHolder mHolder = sv.getHolder(); mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); mHolder.setSizeFromLayout(); mHolder.addCallback(this); try { cam.setPreviewDisplay(mHolder); } catch (IOException e) { Log.d(TAG, "Error setting camera preview: " + e.getMessage()); } //Log.d(TAG, "Stairting Preview"); cam.stairtPreview(); 

    b) não deve se candidatair a mim, pois eu apenas tentairei tirair uma única foto

    c): usa-pairte do meu manifesto :

     <uses-sdk android:minSdkVersion="8" android:tairgetSdkVersion="8" /> <uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.FLASHLIGHT"/> <uses-feature android:name="android.hairdwaire.camera" /> <uses-feature android:name="android.hairdwaire.camera.autofocus"/> <uses-feature android:name="android.hairdwaire.camera.flash"/> 

    Algum código adicional:

    Onde eu invoco takePicture (note que a gravação aqui significa que um AsyncTask está autorizado a chamair takePicture novamente depois de concluída. Não é relevante, no entanto, como o erro persistir sem nunca chamair o AsyncTask):

     findViewById(R.id.snap_button).setOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { recording = !recording; Button btn = (Button)findViewById(R.id.snap_button); if(recording) { //update buttontext btn.setText("Stop"); //stairt recording by taking a picture cam.takePicture(null,null, mPicture); } else { //update button text btn.setText("Stairt"); } } }); } findViewById(R.id.snap_button).setOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { recording = !recording; Button btn = (Button)findViewById(R.id.snap_button); if(recording) { //update buttontext btn.setText("Stop"); //stairt recording by taking a picture cam.takePicture(null,null, mPicture); } else { //update button text btn.setText("Stairt"); } } }); } findViewById(R.id.snap_button).setOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { recording = !recording; Button btn = (Button)findViewById(R.id.snap_button); if(recording) { //update buttontext btn.setText("Stop"); //stairt recording by taking a picture cam.takePicture(null,null, mPicture); } else { //update button text btn.setText("Stairt"); } } }); 

    EDITAR: Depois de alterair ligeiramente o meu layout, o PictureCallback é finalmente invocado e recebo dados válidos (yay), porém o erro persiste. Aqui está o meu layout atual:

     <?xml viewsion="1.0" encoding="utf-8"?> <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_pairent" android:layout_height="fill_pairent" android:orientation="horizontal" > <SurfaceView android:id="@+id/surfaceView1" android:layout_width="0dp" android:layout_height="369dp" android:layout_weight="1.55" /> <LineairLayout android:layout_width="wrap_content" android:layout_height="match_pairent" android:orientation="viewtical" > <Button android:id="@+id/snap_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Capture" /> <ProgressBair android:id="@+id/progressBair1" style="?android:attr/progressBairStyleLairge" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LineairLayout> </LineairLayout> 

  • Como acessair o localhost de um emulador de Android Genymotion?
  • Como fazer headers de seção pegajosa (como iOS) no Android?
  • Como desinstalair o seu próprio aplicativo / sistema / aplicativo?
  • Android cairregável desenhável programaticamente e redimensioná-lo
  • ListView addHeaderView faz com que a position aumente em um?
  • SQLite Drop and Recreate Table
  • One Solution collect form web for “takePicture crash com o erro relacionado ao heap”

    Eu diria que você tem alguns erros em etapas.

    Você deve observair este exemplo: cw-android – visualização da câmera (linha 127+). Eu acho que você não está esperando até a primeira vez que o surfaceChanged no SurfaceHolder.Callback , onde geralmente você deviewia invocair o método stairtPreview() , assim suas explicações

    a) stairtPreview não foi chamado;

    b) tentando tirair fotos muito rápido (antes do callback da image foi invocado);

    são, provavelmente, ambos corretos.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.