2010-12-03 11 views
1

私はカメラデバイスで何ができるかを試してみました。この次のコードは機能しますが、解決できないような問題がいくつかあります。Androidカメラで問題が発生しました

  1. 最初の呼び出しは機能しません。初めてコードを実行するとき、onPictureTakenコールバックは決して呼び出されないので、ファイルは決して書き込まれません。しかし、カメラは、偽のシャッターノイズを作ることを含む他のすべてのステップを経る。

  2. 画像のサイズをデフォルト以外の値に設定できないようです。それを何かに設定しようとすると、コードは機能しなくなります。上記と同じですが、カメラがすべてのモーションを通過しますが、onPictureTakenコールバックは決して呼び出されません。

  3. 写真をDCIMフォルダに保存すると、携帯電話を再起動しない限り、撮影した写真が携帯電話のデフォルトの「写真」アプリに表示されません。

  4. シャッターノイズを無効にする方法はありますか?

申し訳ありませんが、そのコードは少し実験的なものです。

また、このコードはすべてのBroadcastReceiver

@Override 
public void onReceive(Context context, Intent intent) { 
    // TODO Auto-generated method stub 


    if(intent.getAction().equals(TAKE_PICTURE_INTENT)) 
    { 


     Toast.makeText(context, "Test", Toast.LENGTH_LONG).show(); 


       System.out.println("GOT THE INTENT"); 

        try 
        { 
         Camera camera = Camera.open(); 

         System.out.println("CAMERA OPENED"); 

         Parameters params = camera.getParameters(); 
         params.set("flash-mode", "off"); 
         params.set("focus-mode", "infinity"); 
         params.set("jpeg-quality", "100"); 
         //params.setPictureSize(2592, 1952); 

         String str = params.get("picture-size" + "-values"); 
         System.out.println(str); 

         String size = str.split(",")[0]; 
         System.out.println(size); 

         //params.set("picture-size", size); 

         camera.setParameters(params); 


         System.out.println("CAMERA PARAMETERS SET"); 



         camera.startPreview(); 
         System.out.println("CAMERA PREVIEW STARTED"); 


         camera.autoFocus(new AutoFocusCallBackImpl()); 


        } 
        catch(Exception ex) 
        { 
         System.out.println("CAMERA FAIL, SKIP"); 
         return ; 
        } 


    }//if 

}//onreceive 


private void TakePicture(Camera camera) 
{ 
    camera.takePicture(new Camera.ShutterCallback() { 

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

      System.out.println("CAMERA SHUTTER CALLBACK"); 
     } 
    } 
    , null, 
     new Camera.PictureCallback() { 

       public void onPictureTaken(byte[] imageData, Camera c) { 
        //c.release(); 

        System.out.println("CAMERA CALLBACK"); 

        FileOutputStream outStream = null; 
        try { 

         System.out.println("Start Callback"); 
         File esd = Environment.getExternalStorageDirectory(); 

         outStream = new FileOutputStream(esd.getAbsolutePath() + String.format(
           "/DCIM/%d.jpg", System.currentTimeMillis())); 

         outStream.write(imageData); 
         outStream.close(); 
         System.out.println("onPictureTaken - wrote bytes: " + imageData.length); 
        } catch (FileNotFoundException e) { 
         e.printStackTrace(); 

          System.out.println("File not found exception"); 
        } catch (IOException e) { 
         e.printStackTrace(); 

          System.out.println("IO exception"); 
        } finally { 
          System.out.println("Finally"); 
          c.release(); 
        } 

       } 
      } 
     ); 
    //camera.release(); 
}//TAKE PICTURE 

private class AutoFocusCallBackImpl implements Camera.AutoFocusCallback { 
    @Override 
    public void onAutoFocus(boolean success, Camera camera) { 
     //bIsAutoFocused = success; //update the flag used in onKeyDown() 
     System.out.println("Inside autofocus callback. autofocused="+success); 
     //play the autofocus sound 
     //MediaPlayer.create(CameraActivity.this, R.raw.auto_focus).start(); 

     if(success) 
     { 
      System.out.println("AUTO FOCUS SUCCEDED"); 
     } 
     else 
     { 
      System.out.println("AUTO FOCUS FAILED"); 
     } 

     TakePicture(camera); 
     System.out.println("CALLED TAKE PICTURE"); 

    } 
}//AUTOFOCUSCALLBACK 

答えて

1

1.Firstで実行されるseprate活動に入れて放送受信&からすべてのカメラロジックを置きます。

2.

画像がDCIMフォルダに保存されているとき、私が電話を再起動しない限り、撮影した写真は、私の携帯電話上のデフォルトの '写真]アプリには表示されません。

写真を撮ると画像や変更を再スキャンするためにMediaScannerを呼び出す必要があるためです。あなたがメディアを再起動すると、メディアをスキャンして&の画像が検索されます。このisuueのために、あなたはMediaScannerをチェックアウトする必要があります。

3.Follow AndroidのカメラTutorial & Camera API

-Thanks

+0

を私はそれが存在することを認識していなかった、あなたはメディアスキャナーについて何を意味するかを参照してください。その放送受信機の理由は、私が必要な時にいつでもコードを使って画像を取得できる場所を作ることを望んでいたからです。私は本当にそこに活動が関わってほしくない。 – Kratz

+0

いいえ、私はBroadCastReceiver(Check API Doc)にアクティビティが表示されません。 –

関連する問題