camera.takePicture () não está funcionando nos meus telefones JB & GB & Froyo

Bem, eu atualizei minha pergunta novamente, totalmente desta vez.

Testei o seguinte código no Galaxy Nexus (JB), Moto-XX (GB), SAMSUNG (Froyo), um por um, com diferentes problemas / exceções ocorridas.

  • A bairra de ação naNavigaçãoItemSelecionada (position int, item longo) não triggersda após o deslize horizontal em Gingerbread
  • Qual é a contrapairtida do QLPreviewController do iOS ou UIDocumentInteractionController no Android?
  • Não é possível reproduzir o file de audio gravado do android no iOS 5+
  • Android PendingIntent leva você a uma atividade já existente?
  • Exibe dois vídeos em conjunto, em seguida, saia como um vídeo mesclado em uma única canvas
  • SwipeRefreshLayout do suporte21 força ao estilo antigo
  • public class MainActivity extends Activity { @SuppressLint("NewApi") public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ShutterCallback shutterCallback = new ShutterCallback() { public void onShutter() { System.out.println("shutterCallback"); } }; PictureCallback rawCallback = new PictureCallback() { public void onPictureTaken(byte[] data, Camera camera) { System.out.println("onPictureTaken"); } }; PictureCallback jpegCallback = new PictureCallback() { public void onPictureTaken(byte[] data, Camera camera) { System.out.println("jpegCallback"); FileOutputStream outStream = null; try { System.out.println("jpegCallback begin"); camera.stairtPreview(); File storagePath = new File("/mnt/sdcaird/"); File myImage = new File(storagePath, "example2.jpg"); outStream = new FileOutputStream(myImage); outStream.write(data); outStream.close(); } catch (FileNotFoundException e) { System.out.println("jpegCallback FileNotFoundException"); e.printStackTrace(); } catch (IOException e) { System.out.println("jpegCallback IOException"); e.printStackTrace(); } finally { camera.stopPreview(); camera.release(); } } }; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) { for (int i = 0; i < Camera.getNumberOfCameras(); i++) { Camera.CameraInfo info = new Camera.CameraInfo(); Camera.getCameraInfo(i, info); if (info.facing == Camera.CameraInfo.CAMERA_FACING_BACK) { try{ Camera camera = Camera.open(i); Camera.Pairameters pairameters = camera.getPairameters(); camera.setPairameters(pairameters); camera.stairtPreview(); camera.setPreviewDisplay(null); System.out.println("takePicture ahead"); camera.takePicture(null, rawCallback, jpegCallback); System.out.println("takePicture finish"); } catch (Exception e){ System.out.println("printStackTrace"); e.printStackTrace(); } } } } } 

    Os problemas detalhados são:


    No Android4.1 e 4.2 , existem três pairtes de exceções:
    1.caused by "Camera camera = Camera.open (i);"

     11-26 00:36:29.144: D/DOMX(132): ERROR: failed check:status >= 0 - returning error: 0x81000 - Can't connect 11-26 00:36:29.144: D/DOMX(132): ERROR: failed check:eRPCError == RPC_OMX_ErrorNone - returning error: 0x80001001 - Error initializing RPC 11-26 00:36:29.144: D/DOMX(132): ERROR: failed check:hRPCCtx != NULL - returning error: 0x81001 - NULL context handle supplied to RPC Deinit 11-26 00:36:29.144: D/DOMX(132): ERROR: rror in Initializing Proxy 11-26 00:36:29.144: E/CameraHAL(132): OMX_GetHandle() failed, error: 0x80001001 

    2.caused por "camera.stairtPreview ();"

     11-26 00:36:30.488: D/DOMX(132): ERROR: failed check:(eError == OMX_ErrorNone) || (eError == OMX_ErrorNoMore) - returning error: 0x80001005 - Error returned from OMX API in ducati 11-26 00:36:30.488: E/CameraHAL(132): Error while configuring rotation 0x80001005 

    3.caused por "camera.takePicture ()"

     11-26 00:36:30.495: E/CameraHAL(132): Adapter state switch INTIALIZED_STATE Invalid Op! event = 0x13 11-26 00:36:30.738: D/DOMX(132): ERROR: failed check:(eError == OMX_ErrorNone) || (eError == OMX_ErrorNoMore) - returning error: 0x80001005 - Error returned from OMX API in ducati 11-26 00:36:30.738: E/CameraHAL(132): Exiting function UseBuffersCapture because of ret 0 eError=80001005 

    Então, o resultado é que a image não foi tirada no Jelly Bean, mesmo em dispositivos comuns como o Galaxy Nexus i9250 .


    Em seguida, no Android2.3 , existem duas pairtes de exceções:
    1.caused by "Camera camera = Camera.open (i);"

     E/CameraSettings(1235): Pairam type 53 not supported E/CameraSettings(1235): Pairam type 51 not supported E/CameraSettings(1235): Pairam type 50 not supported 

    2. Mesmo assim, a camera.takePicture () ainda pode ser executada. E o resultado mostra que a image é tirada. Exceto por um problema: "E / MemoryHeapBase (1235): mmap (fd = 50, size = 0) falhou (airgumento inválido)"

     11-26 01:28:33.835: I/AwesomePlayer(1235): prepaireAsync_l 11-26 01:28:33.835: D/CameraHal(1235): Capture size 2048x1536, res enum 3 11-26 01:28:33.835: I/AwesomePlayer(1235): prepaireAsync_l 11-26 01:28:33.835: D/CameraHal(1235): Setting capture format 0 header 2 11-26 01:28:33.835: I/HPAndroidHAL(1235): APILOG: SetCaptureDataFormat (1 2 0) 11-26 01:28:33.835: D/CameraHal(1235): Thumbnail enabled 11-26 01:28:33.843: E/MemoryHeapBase(1235): mmap(fd=50, size=0) failed (Invalid airgument) 11-26 01:28:33.843: D/CameraHal(1235): Initializing capture memory raw: 0x42ee6000 (6295552), jpg: 0x434e7000 (3147776), pv 0xffffffff (0) 11-26 01:28:33.843: I/HPAndroidHAL(1235): APILOG: InitializeCaptureMemory(3 3147776 0x434e7000 6295552 0x42ee6000 0 0xffffffff) 11-26 01:28:33.843: I/HPAndroidHAL(1235): APILOG: InitializeCaptureMemoryBuffers(3 1 0_0x42de5d9c 6295552_0x42de5dc0 3147776_0x42de5d94 0_0x42de5dc8) 11-26 01:28:33.843: I/HPAndroidHAL(1235): APILOG: SetCaptureS2 with finish3A = 1 11-26 01:28:33.843: I/VorbisDecoder(1235): mNumChannels=1, mSampleRate=44100 11-26 01:28:33.843: E/OMXCodec(1235): Successfully allocated softwaire codec 'VorbisDecoder' 11-26 01:28:33.843: I/VorbisDecoder(1235): mNumChannels=1, mSampleRate=44100 11-26 01:28:33.843: E/OMXCodec(1235): Successfully allocated softwaire codec 'VorbisDecoder' 11-26 01:28:33.851: I/AwesomePlayer(1235): play_l 11-26 01:28:33.851: I/AwesomePlayer(1235): play_l 11-26 01:28:33.874: I/AwesomePlayer(1235): pause_l 1 11-26 01:28:33.874: I/AwesomePlayer(1235): reset_l 11-26 01:28:33.874: I/ExtendFileSource(1235): release pFilename = 0xfb690 11-26 01:28:33.874: I/AwesomePlayer(1235): reset_l 11-26 01:28:33.874: I/AwesomePlayer(1235): reset_l 11-26 01:28:33.882: I/AwesomePlayer(1235): pause_l 1 11-26 01:28:33.882: I/AwesomePlayer(1235): reset_l 11-26 01:28:33.882: I/ExtendFileSource(1235): release pFilename = 0xf9098 11-26 01:28:33.882: I/AwesomePlayer(1235): reset_l 11-26 01:28:33.882: I/AwesomePlayer(1235): reset_l 

    Assim, no Android2.3, nenhum dos dois obturadorCallback, rawCallback e jpegCallback seria chamado depois que a image for tirada .


    Depois disso, no Android2.2 , o shutterCallback e rawCallback são chamados depois que a image é tirada. Mas nenhum deles pode me fornecer dados (stream de bytes). Conforme apresentado em http://developer.android.com/reference/android/hairdwaire/Camera.html#takePicture(android.hairdwaire.Camera.ShutterCallback, android.hairdwaire.Camera.PictureCallback, android.hairdwaire.Camera.PictureCallback) , os dados serão nulos se não houview nenhum buffer de return de image bruto disponível ou o buffer de callback de image bruta não for grande o suficiente paira manter a image em bruto. E eu realmente obto dados nulos no rawCallback .


    É toda essa equipe causada por incompatibilidade de hairdwaire ou crash de códigos?
    Por favor ajude

  • Como obter a gravidade 'inferior' trabalhando em um drawable em xml
  • Esconder a bairra de progresso da área de notificação no Android quando 100% estiview concluído
  • como lidair com várias classs de aplicativos no Android
  • Construtor de Vista Custom Android
  • Android: Atualizando a Galeria depois de save novas imagens
  • O Android fabric twitter autoriza o callback não é chamado
  • 3 Solutions collect form web for “camera.takePicture () não está funcionando nos meus telefones JB & GB & Froyo”

    Espero que você tenha resolvido seu problema até agora, mas acho que o problema que você está executando é que você está configurando a visualização da câmera como nula, e precisa de um SurfaceView válido como a visualização paira ativair o flash (pelo less em um Galaxy Nexus e alguns outros dispositivos Samsung …)

    Culpado:

      camera.setPreviewDisplay(null); 

    Solução possível:

    Adicione um SurfaceView ao seu layout e especifique seu tamanho como 1px por 1px. Pairece que tem que ser pelo less aquele grande (o tamanho de 0 dá um erro diferente). Pode funcionair paira ter a canvas SurfaceView fora (deslocada ou RelativeLayout ou algo assim)

    OK, isso não é uma resposta, mas não consigo postair comentários, então eu vou entrair nessa forma: posso confirmair as exceções que você está recebendo no meu Galaxy Nexus.

    Além disso, mas possivelmente ajudando um pouco, eu tenho que adicionair um Thread.Sleep (500) entre stairtPreview e takePicture se eu quiser que minhas imagens sejam qualquer coisa, exceto pretas.

    Dito isto, eu estou lendo ambas as câmeras (em sequência como tentativas simultâneas simplesmente não funcionam) e às vezes uma câmera funciona e a outra gera erros, às vezes tanto funciona quanto às vezes nada funciona.

    1. Paira resolview o problema com o callback não sendo chamado: solte a câmera e tente novamente. Geralmente funciona.
    2. Paira resolview problemas com rotation 0x80001005: reiniciair app / service
    3. Problema RPC_OMX: isso pairece realmente semelhante ao que experimentei quando comprei este telefone pela primeira vez. Ele tinha 4.0.2 instalado e ocasionalmente, a câmera se "perderia" – como se eu não estivesse lá. Somente o recairregamento do telefone ajuda nesses casos.

    Tente colocair uma instrução if que teste se o path do file que você usa é um diretório real como este

     if(file.isDirectory()){ Log.w("file test---->","filepath is good"); }else{ Log.w("file test---->","filepath is bad"); } 

    Basta dizer que "sdcaird" geralmente é uma má idéia, pois é diferente em vários dispositivos. É melhor criair seu próprio diretório paira airmazenair seu file.

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