0

Android アプリで写真を撮ろうとしていますが、画像を撮ってもカメラの表示が消えません。私が使用しているコードは以下のとおりです。また、Google の開発者向け Web サイト 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 などの import ステートメントなど、コードに必要な import ステートメントがあることを確認してください。

今すぐうまくいくことを強く願っています:)

于 2013-04-04T19:48:30.863 に答える
1

問題はあなたonTouchListenerの中にありますButton!

私はあなたのコードを実行し、代わりに をに変更しonTouchListenerました。コードは機能しています。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_MOVEれますMotionEvent.ACTION_UP

これで、最初のイベントMotionEvent.ACTION_DOWNがカメラを表示するインテントをトリガーし、写真を撮った後に [OK] をクリックすると、次のイベントがトリガーされるのを順番MotionEvent MotionEvent.ACTION_MOVEに待っており、カメラ アクティビティに再び送られます。もう 1 枚写真を撮って [OK] をクリックすると、アクティビティに戻り、最後の写真MotionEvent MotionEvent.ACTION_UPが並んでいて、カメラ アクティビティへの 3 番目の呼び出しをトリガーします。最後のカメラ コールの後、問題なくアクティビティに戻ることができます ;-)

がこれをonClickListener行わない 理由はMotionEvent.ACTION_DOWN、 「フル」クリックを処理するためです。MotionEvent.ACTION_MOVEMotionEvent.ACTION_UP

お役に立てれば ;-)

于 2013-04-04T20:23:38.097 に答える