0

我正在尝试使用我的 Android 应用程序拍照,但是当我拍照时,相机显示并没有消失。我正在使用的代码如下。我还在 Google 的开发者网站 SDK 上使用了 SDK。

 import android.os.Bundle;
 import android.app.Activity;
 import android.content.Intent;
 import android.graphics.Bitmap;
 import android.graphics.Camera;
 import android.view.Menu;
 import android.view.MotionEvent;
 import android.view.View;
 import android.widget.Button;
 import android.widget.ImageView;

 public class MainActivity extends Activity {
private static final int CAMERA_REQUEST = 1888; 

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button mainButton = (Button)findViewById(R.id.mainBtn);
    mainButton.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
            //Intent userCreationIntent = new Intent(v.getContext(), SecondviewActivity.class);
            //startActivity(userCreationIntent);
            Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
            startActivityForResult(cameraIntent, CAMERA_REQUEST); 

            return false;
        }
    });
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    if (requestCode == CAMERA_REQUEST) {  
        Bitmap photo = (Bitmap) data.getExtras().get("data");
        ImageView imageView = (ImageView)findViewById(R.id.imageView1);
        imageView.setImageBitmap(photo);
        Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    }  
} 

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}
}
4

2 回答 2

1

发生这种情况是因为您没有附加路径,目的是告诉 Android 将图像存储在哪里。我也有同样的问题。

试试下面的代码:(我刚刚添加了 4 行)

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Camera;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity {
    private static final int CAMERA_REQUEST = 1888; 
    // Creating the Uri where Camera saves a picture each time
    String imagePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + System.currentTimeMillis() + "_myCameraImage.jpg";
    File imageFile = new File(imagePath);
    imageUri = Uri.fromFile(imageFile);

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);

   Button mainButton = (Button)findViewById(R.id.mainBtn);
   mainButton.setOnTouchListener(new View.OnTouchListener() {

   @Override
   public boolean onTouch(View v, MotionEvent event) {
        // TODO Auto-generated method stub
        //Intent userCreationIntent = new Intent(v.getContext(), SecondviewActivity.class);
        //startActivity(userCreationIntent);

        Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
        cameraIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageUri);

        startActivityForResult(cameraIntent, CAMERA_REQUEST); 

        return false;
        }
    });
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    if (requestCode == CAMERA_REQUEST) {  
        Bitmap photo = (Bitmap) data.getExtras().get("data");
        ImageView imageView = (ImageView)findViewById(R.id.imageView1);
        imageView.setImageBitmap(photo);
        Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    }  
} 

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
   }
}

在复制和粘贴此代码之前,请确保您的代码中有必要的导入语句,例如 File、Uri 等的导入语句。

我强烈希望它现在可以工作:)

于 2013-04-04T19:48:30.863 回答
1

问题是在你onTouchListenerButton

我刚刚运行了您的代码并将其更改为onTouchListenera并且代码正在运行。onClickListenerButton

在这里查看我修改后的代码:

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity {
    private static final int CAMERA_REQUEST = 1888;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button mainButton = (Button) findViewById(R.id.mainBtn);
        mainButton.setOnClickListener(new OnClickListener() {       
            @Override
            public void onClick(View arg0) {
                Intent cameraIntent = new Intent(
                android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(cameraIntent, CAMERA_REQUEST);
            }
        });
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == CAMERA_REQUEST) {
            Bitmap photo = (Bitmap) data.getExtras().get("data");
            ImageView imageView = (ImageView) findViewById(R.id.imageView1);
            imageView.setImageBitmap(photo);
        }
    }
}

我不太确定,为什么你使用onTouchListenerfor a Button,但它显然不起作用 - 实际上真的很奇怪;-)

编辑:只是一个小更新。我尝试调试代码,如果您使用onTouchListener代替onClickListener,单击按钮时,您实际上会触发3 MotionEvents:MotionEvent.ACTION_DOWN和.MotionEvent.ACTION_MOVEMotionEvent.ACTION_UP

现在第一个事件MotionEvent.ACTION_DOWN将触发您显示相机的意图,当您在拍照后单击“确定”时,下一个MotionEvent MotionEvent.ACTION_MOVE事件正在排队等待触发,这将再次将您发送到相机活动。现在,在再拍一张照片并单击“确定”后,您返回到您的活动,现在最后一张MotionEvent MotionEvent.ACTION_UP正在排队等候并触发对相机活动的第三次调用。在最后一次摄像头通话后,您将能够毫无问题地回到您的活动中;-)

为什么onClickListener不这样做,是因为它处理可能是的“完整”点击, MotionEvent.ACTION_DOWN因此MotionEvent.ACTION_MOVE所有MotionEvent.ACTION_UP3 个事件都在一次点击中发生。

希望这可以帮助 ;-)

于 2013-04-04T20:23:38.097 回答