我正在尝试实现一个自定义的相机应用程序。
我的目标是添加像GPS数据一样的图片文本。实际上,我有两个问题。第一个是随机出现的,我的应用程序停止工作,没有出现错误消息。当我拍摄一张图片时,字节数组(图片的数据)由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张就停了?
谢谢
发布于 2018-08-14 01:12:15
使用USB调试来模拟您的应用程序,并经常查看日志猫窗口以获得错误通知或查找应用程序崩溃的时间。希望能对你有所帮助。
https://stackoverflow.com/questions/51820501
复制相似问题