2013-04-02 55 views
0

我正在嘗試使用我的Android應用拍照,但是當我拍攝圖像時,相機顯示屏不會消失。我正在使用的代碼如下。我還在Google的開發者網站SDK上使用了SDK。Android相機活動保持開啓狀態

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; 
} 
} 

回答

1

的問題是你的onTouchListener內的Button

我剛剛運行了您的代碼,並將onTouchListener更改爲onClickListener代替Button,代碼正在運行。

看到這裏我修改後的代碼:

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); 
     } 
    } 
} 

我不能準確地把握,爲什麼您使用的onTouchListenerButton,但它不工作顯然是 - 很奇怪的行爲實際上;-)

編輯:只是一個小小的更新。我試圖調試代碼,如果您使用onTouchListener而不是onClickListener,則單擊該按鈕時,實際上會觸發3 MotionEventsMotionEvent.ACTION_DOWN,MotionEvent.ACTION_MOVEMotionEvent.ACTION_UP

現在第一個事件MotionEvent.ACTION_DOWN將觸發你的意圖,以顯示相機,當你點擊OK你拍攝的照片,接下來MotionEventMotionEvent.ACTION_MOVE正在排隊等着被觸發後,這將送你到相機活動再來一次。現在再拍攝一張照片並單擊確定後,您將返回到您的活動,現在最後的MotionEventMotionEvent.ACTION_UP排隊等待並觸發第三次對相機活動的呼叫。最後相機通話結束後,你將能夠返回到您的活動沒有任何問題;-)

爲什麼onClickListener並沒有這樣做,是因爲它處理一個「全」,點擊它可以是MotionEvent.ACTION_DOWNMotionEvent.ACTION_MOVEMotionEvent.ACTION_UP所以所有3個事件都是在一次點擊中發生的。

希望這有助於;-)

+0

非常感謝!它正在工作!還有一個問題(我仍然給你的聲譽),但我怎麼能叫照片庫? –

+0

沒問題;-)調用圖庫:'Intent intent = new Intent(); intent.setType(「image/*」); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(意圖。createChooser(intent, 「Select Picture」),1);' 或者參見http://stackoverflow.com/questions/2169649/get-pick-an-image-from-androids-built-in-gallery-app-以編程方式 – Darwind

+0

再次感謝@Darwind! –

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; 
    } 
} 

複製之前並粘貼此代碼,請確保你在你的代碼必要的import語句像文件import語句,烏里等。

我強烈希望將現在的工作:)

+0

我會試試看,謝謝! –

+0

我有一些錯誤。我嘗試導入語句,但仍然收到錯誤,說他們不存在。 –

+0

它沒有工作,相機仍然保持打開狀態。 –