我正在尝试实现自定义相机应用。
我的目的是添加所拍摄的图片文字,例如GPS数据。实际上,我有两个问题。第一次随机发生,我的应用程序停止运行且没有错误消息。当我拍摄照片时,字节数组(pic的数据)通过intent.putExtras()发送到另一个活动。这第二项活动使用户可以查看自己的照片,将来可以向其中添加GPS数据之类的文本,取消或保存。
我的应用程序在显示第二个活动之前停止工作。有时在0张图片之后,通常是在拍摄2-3张图片之后(对于这2-3张图片,我的应用正常运行了)。我听不懂
第二个问题不是问题,但是如果有人有答案:我无法在位图上写文本,当我尝试使用答案(https://stackoverflow.com/a/7328777/9917854)时,我的应用也将停止运行而没有消息。 ..
代码:MainActivty onCreate()
private CameraPreview mPreview;
//...
if (checkCameraHardware(this)) {
mCamera = getCameraInstance();
mPreview = new CameraPreview(this, mCamera);
FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
preview.addView(mPreview);
Button captureButton = (Button) findViewById(R.id.button_capture);
captureButton.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
a=0;
Intent intent = new Intent("com.reboulnoah.picloc");
intent.putExtra("value", 1);
sendBroadcast(intent);
mCamera.takePicture(null, null, mPicture);
}
}
);
}
}
MainActivity getCameraInstance()
public static Camera getCameraInstance() {
Camera c = null;
try {
c = Camera.open(); // attempt to get a Camera instance
} catch (Exception e) {
Log.e("APP", e.getMessage());
}
return c;
}
MainActivity onPicTaken()
private Camera.PictureCallback mPicture = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
mCamera.stopPreview();
mCamera.startPreview();
Intent i = new Intent(MainActivity.this, CustomizePic.class);
i.putExtra("pic", data);
startActivity(i);
}
};
CameraPreview是从Android Developper官方网站提取的类。我已经改变了事情,但是我的应用也之前也停止了。我更改了surfaceDestroyed。没有代码,在surfaceCreated中,我已经旋转了相机。
public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder mHolder;
private Camera mCamera;
private static final String TAG = "MyActivity";
public CameraPreview(Context context, Camera camera) {
super(context);
mCamera = camera;
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void surfaceCreated(SurfaceHolder holder) {
try {
mCamera.setPreviewDisplay(holder);
mCamera.setDisplayOrientation(90);
Camera.Parameters parameters = mCamera.getParameters();
parameters.setRotation(90);
mCamera.setParameters(parameters);
mCamera.startPreview();
} catch (IOException e) {
Log.e(TAG, "surfaceCreated "+ e.getMessage());
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
mCamera.stopPreview();
Log.e(TAG,"surfaceDEst");
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
if (mHolder.getSurface() == null){
return;
}
try {
mCamera.stopPreview();
} catch (Exception e){
// ignore: tried to stop a non-existent preview
}
// set preview size and make any resize, rotate or
// reformatting changes here
// start preview with new settings
try {
mCamera.setPreviewDisplay(mHolder);
mCamera.startPreview();
} catch (Exception e){
Log.e(TAG, "SurfaceChanged "+e.getMessage());
}
}
我的第二个活动CustomizePic onCreate()
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
final byte[] data = getIntent().getByteArrayExtra("pic");
if(data != null){
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
LinearLayout linearLayout = findViewById(R.id.linear2);
SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
String restoredText = prefs.getString("alt", null);
Drawable d = new BitmapDrawable(bitmap);
linearLayout.setBackground(d);
}
那我做错了什么?为什么拍照后2-3张照片后我的应用会停止?
谢谢
答案 0 :(得分:0)
使用USB调试模拟您的应用程序,并经常查看log cat窗口以了解错误通知或查找应用程序崩溃的时间。 希望对您有帮助。