首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >拍摄2-3张照片后,Cutsom相机应用程序停止工作,没有错误消息

拍摄2-3张照片后,Cutsom相机应用程序停止工作,没有错误消息
EN

Stack Overflow用户
提问于 2018-08-13 18:44:19
回答 1查看 23关注 0票数 0

我正在尝试实现一个自定义的相机应用程序。

我的目标是添加像GPS数据一样的图片文本。实际上,我有两个问题。第一个是随机出现的,我的应用程序停止工作,没有出现错误消息。当我拍摄一张图片时,字节数组(图片的数据)由intent.putExtras()发送给另一个活动。第二个活动允许用户查看他的照片,以便在将来添加文本,如GPS数据,取消它或保存它。

在显示第二个活动之前,我的应用程序停止工作。有时在0张照片之后,通常在2-3张照片之后(对于这2-3张照片,我的应用程序工作正常)。我不能理解。

第二个问题不是问题,但是如果有人有答案:我无法在我的位图上写文本,当我尝试这个答案(https://stackoverflow.com/a/7328777/9917854)时,我的应用程序也在没有消息的情况下停止工作...

代码: MainActivty onCreate()

代码语言:javascript
运行
复制
    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 ()

代码语言:javascript
运行
复制
   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()

代码语言:javascript
运行
复制
     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中,我旋转了摄像头。

代码语言:javascript
运行
复制
    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()

代码语言:javascript
运行
复制
    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张就停了?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-08-14 01:12:15

使用USB调试来模拟您的应用程序,并经常查看日志猫窗口以获得错误通知或查找应用程序崩溃的时间。希望能对你有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51820501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档