2012-11-16 35 views
0

我試圖加載攝像機從我的Android應用拍照,推出Android相機意圖和佈局

我Photos.java是

private Uri imageUri; 

public void takePhoto(View view) { 
    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
    File photo = new File(Environment.getExternalStorageDirectory(), "Pic.jpg"); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, 
      Uri.fromFile(photo)); 
    imageUri = Uri.fromFile(photo); 
    startActivityForResult(intent, TAKE_PICTURE); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    switch (requestCode) { 
    case TAKE_PICTURE: 
     if (resultCode == Activity.RESULT_OK) { 
      Uri selectedImage = imageUri; 
      getContentResolver().notifyChange(selectedImage, null); 
      ImageView imageView = (ImageView) findViewById(R.id.ImageView); 
      ContentResolver cr = getContentResolver(); 
      Bitmap bitmap; 
      try { 
       bitmap = android.provider.MediaStore.Images.Media 
       .getBitmap(cr, selectedImage); 

       imageView.setImageBitmap(bitmap); 
       Toast.makeText(this, selectedImage.toString(), 
         Toast.LENGTH_LONG).show(); 
      } catch (Exception e) { 
       Toast.makeText(this, "Failed to load", Toast.LENGTH_SHORT) 
         .show(); 
       Log.e("Camera", e.toString()); 
      } 
     } 
    } 

來完成這項工程。但它的佈局部分將這個意圖稱爲我正在努力的。

我創建了一個按鈕加載相機

<Button 
    android:id="@+id/takePhoto" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="41dp" 
    android:onClick="takePhoto" 
    android:text="@string/Photos_Button1" /> 

但現在我需要有一個部分,以顯示我已經拍攝的圖像。我怎麼做?

+0

我也收到錯誤,其中代碼包括 「TAKE_PICTURE」說大炮被解析爲一個變量...然後用「ImageView」說大炮解決或不是一個字段 謝謝 亨利 –

回答

7

試試這個...

注:僅適用於Android的API 8 // 2.2或更高版本

public class PhotoActivity extends Activity { 

    /** The Constant PICK_IMAGE. */ 
    private static final int PICK_IMAGE = 0; 

    /** The Constant PICK_IMAGE_FROM_GALLERY. */ 
    private static final int PICK_IMAGE_FROM_GALLERY = 1; 

    /** The btn cancel. */ 
    private Button btnPhotoCamera,btnPhotoGallery,btnCancel; 

    /** The img view. */ 
    private ImageView imgView; 

    /** The u. */ 
    private Uri u; 

    /* (non-Javadoc) 
    * @see android.app.Activity#onCreate(android.os.Bundle) 
    */ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_photo_options); 

     imgView=(ImageView)findViewById(R.id.imgDisplayImage); 
     btnPhotoCamera=(Button)findViewById(R.id.btnPhotoCamera); 
     btnPhotoGallery=(Button)findViewById(R.id.btnPhotoGallery); 
     btnCancel=(Button)findViewById(R.id.btnCancel); 

     btnPhotoCamera.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 

       Intent camera=new Intent(); 
       camera.setAction(MediaStore.ACTION_IMAGE_CAPTURE); 
       camera.putExtra("crop", "true"); 

       File f=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); 

       u = Uri.fromFile(new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"myFile.jpg")); 
       camera.putExtra(MediaStore.EXTRA_OUTPUT, u); 
       startActivityForResult(camera, PICK_IMAGE); 
      } 
     }); 

     btnPhotoGallery.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 

       Intent intent = new Intent(Intent.ACTION_PICK); 
       intent.setType("image/*"); 
       startActivityForResult(intent, PICK_IMAGE_FROM_GALLERY); 
      } 
     }); 

     btnCancel.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 

       Intent goStartUp=new Intent(PhotoActivity.this, StartUpActivity.class); 
       goStartUp.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       startActivity(goStartUp); 
       finish(); 
      } 
     }); 
    } 

    /* (non-Javadoc) 
    * @see android.app.Activity#onActivityResult(int, int, android.content.Intent) 
    */ 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // TODO Auto-generated method stub 
     if (resultCode==RESULT_OK) 
     { 
      if(requestCode == PICK_IMAGE) { 

       InputStream is=null; 
       try { 
        is = this.getContentResolver().openInputStream(u); 
       } catch (FileNotFoundException e) { 
        e.printStackTrace(); 
       } 
       Bitmap bmp=BitmapFactory.decodeStream(is); 
       imgView.setImageBitmap(bmp); 
       Log.i("Inside", "PICK_IMAGE"); 
      } 

      if (requestCode == PICK_IMAGE_FROM_GALLERY) { 
       Uri selectedImage = data.getData(); 
       String[] filePathColumn = { MediaStore.Images.Media.DATA }; 
       Log.d("data",filePathColumn[0]); 
       Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null); 
       cursor.moveToFirst(); 
       int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
       String picturePath = cursor.getString(columnIndex); 
       cursor.close(); 
       imgView.setImageBitmap(BitmapFactory.decodeFile(picturePath)); 
       Log.i("Inside", "PICK_IMAGE_FROM_GALLERY"); 
      } 
     } 
    } 
} 

XML文件: -

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#f0f0f0"> 
    <TextView 
     android:id="@+id/lblSelectOptions" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="20dp" 
     android:layout_marginTop="20dp" 
     android:text="@string/two_options" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:textColor="#ff0000"/> 
    <Button 
     android:id="@+id/btnPhotoCamera" 
     android:layout_width="75dp" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/lblSelectOptions" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="10dp" 
     android:text="@string/camera"/> 
    <Button 
     android:id="@+id/btnPhotoGallery" 
     android:layout_width="75dp" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/btnPhotoCamera" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="10dp" 
     android:text="@string/gallery"/> 
    <Button 
     android:id="@+id/btnCancel" 
     android:layout_width="120dp" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/btnPhotoGallery" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="19dp" 
     android:text="@string/cancel"/> 
    <TextView 
     android:id="@+id/lblDisplayImage" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/btnCancel" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="10dp" 
     android:text="@string/below_this_text_image_will_be_displayed" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:textColor="#000000" 
     android:textSize="13dp"/> 
    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_below="@+id/lblDisplayImage" 
     android:layout_centerInParent="true" 
     android:layout_marginTop="10dp" 
     android:gravity="bottom"> 
     <!-- 
      <ScrollView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" > 
     --> 
     <ImageView 
      android:id="@+id/imgDisplayImage" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_below="@+id/lblDisplayImage" 
      android:layout_centerInParent="true" 
      android:contentDescription="@string/area_where_image_is_to_be_displayed" /> 
     <!-- </ScrollView> --> 
    </RelativeLayout> 
</RelativeLayout> 

ALso根據以下用途修改Android Manifest文件: -

<manifest.... 
    <uses-sdk 
     android:minSdkVersion="3" 
     android:targetSdkVersion="21" /> 
    <uses-permission android:name="android.permission.CAMERA" /> 
    <uses-permission android:name="android.permission.RECORD_VIDEO" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-feature 
     android:name="android.hardware.camera" 
     android:required="false" /> 
<application.... 
.......... 
</application> 
</manifest> 
+0

只是有一個issu e與 –

+0

文件f = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); u = Uri.fromFile(new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),「myFile.jpg」)); –

+0

DIRECTORY_PICTURES加農炮被解決或不是字段 –

-2
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical" > 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/Photos_Text1" /> 

<Button 
    android:id="@+id/takePhoto" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:onClick="takePhoto" 
    android:text="@string/Photos_Button1" /> 

<Button 
    android:id="@+id/pagePhotoUpload" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:onClick="pagePhotoUpload" 
    android:text="@string/Photos_Button2" /> 

<ImageView 
    android:id="@+id/ImageView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_weight="0.85" 
    android:src="@drawable/ic_action_search" /> 

</LinearLayout> 

我用

 android:onClick="takePhoto" 

然而,這不是在我的Java的任何地方,我曾製造 「takePhoto」 devined