私はカメラデバイスで何ができるかを試してみました。この次のコードは機能しますが、解決できないような問題がいくつかあります。Androidカメラで問題が発生しました
最初の呼び出しは機能しません。初めてコードを実行するとき、onPictureTakenコールバックは決して呼び出されないので、ファイルは決して書き込まれません。しかし、カメラは、偽のシャッターノイズを作ることを含む他のすべてのステップを経る。
画像のサイズをデフォルト以外の値に設定できないようです。それを何かに設定しようとすると、コードは機能しなくなります。上記と同じですが、カメラがすべてのモーションを通過しますが、onPictureTakenコールバックは決して呼び出されません。
写真をDCIMフォルダに保存すると、携帯電話を再起動しない限り、撮影した写真が携帯電話のデフォルトの「写真」アプリに表示されません。
シャッターノイズを無効にする方法はありますか?
申し訳ありませんが、そのコードは少し実験的なものです。
また、このコードはすべての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
を私はそれが存在することを認識していなかった、あなたはメディアスキャナーについて何を意味するかを参照してください。その放送受信機の理由は、私が必要な時にいつでもコードを使って画像を取得できる場所を作ることを望んでいたからです。私は本当にそこに活動が関わってほしくない。 – Kratz
いいえ、私はBroadCastReceiver(Check API Doc)にアクティビティが表示されません。 –