シャッターボタンを押したときに2つの奇妙なことを経験しましたCameraActivity
デバイス2.3および4.0(Galaxy Ace II、Nexus One、Galaxy Nexus)では、約2秒間フリーズしてから、に進みます
nextActivity
。Galaxy Ace 2.3.6のみ、凍結期間中に下の写真のような文字化けしたピクセルが表示されますが、後で正しい画像が表示される可能性があります
nextActivity
。
最初は、自分の方法で何かがおかしい、または時間がかかるのではないかと思いましたが、PicutureCallback
大丈夫ですか?そして、なぜこの文字化けしたピクセルがギャラクシーエースにのみ表示されるのか理解できません。
PictureCallback
それで、それをより速くするために処理するより良い方法がありますか?
エラーログがないので、関連するコードを入力するだけです。
// I call the takePicture in my button listener.
camera.takePicture(null, null, mPicture);
// here's the picture callback
private PictureCallback mPicture = new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
new ShutterHandler(data).execute();
}
class ShutterHandler extends AsyncTask<Void, Void, Void> {
Bitmap bm;
String timeStamp;
String filename;
Intent nextIntent = new Intent(CameraActivity.this, nextActivity.class);
// a tricky way to pass data into the AsyncTask
public ShutterHandler(byte[] data) {
bm = BitmapFactory.decodeByteArray(data, 0, data.length);
}
@Override
protected Void doInBackground(Void... params) {
// simply generate a time stamp as filename
timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
filename = timeStamp + ".jpg";
Uri path;
try {
// save file to app's private folder
FileOutputStream fos = openFileOutput(filename, Context.MODE_PRIVATE);
bm.compress(Bitmap.CompressFormat.JPEG, 100, fos);
// retrieve Uri from the file
path = Uri.fromFile(getFileStreamPath(filename));
Log.d("CameraActivity", "file saved to: " + path);
fos.flush();
fos.close();
// launch ShowMarkersActivity
String pathString = path.getPath();
nextIntent.putExtra("IMG", pathString);
nextIntent.putExtra("FileName", filename);
nextIntent.putExtra("FLAG", true);
} catch (FileNotFoundException e) {
Log.d("CameraActivity", "File not found: " + e.getMessage());
} catch (IOException e) {
Log.d("CameraActivity", "Error accessing file: " + e.getMessage());
}
return null;
}
protected void onPostExecute(Void v) {
CameraActivity.this.startActivity(nextIntent);
finish();
}
}
};