2014-11-01 25 views
0

我很新的android和我有問題指定意圖是來自相機或畫廊在第二個活動。這裏是我的代碼:如何指定是否意圖來自相機或在另一個活動的畫廊活動

MainActivity

ImageViewerActivity
public class MainActivity extends ActionBarActivity implements OnClickListener { 

private static final int CAMERA_REQUEST = 1888; 
private static final int PICK_FROM_CAMERA = 1; 
private static final int PICK_FROM_GALLERY = 2; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.activity_main); 

    Button cameraButton = (Button) this.findViewById(R.id.cameraButton); 
    Button galleryButton = (Button) this.findViewById(R.id.galleryButton); 

    //Here we choose to take a new picture 
    cameraButton.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(cameraIntent, CAMERA_REQUEST); 

      cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT,MediaStore.Images.Media.EXTERNAL_CONTENT_URI.toString()); 

     } 
    }); 

    // Here we choose a photo from the gallery 
    galleryButton.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
      startActivityForResult(galleryIntent, PICK_FROM_GALLERY); 
     } 
    }); 


}  

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    super.onActivityResult(requestCode, resultCode, data); 
    switch(requestCode) 
    { 
     case PICK_FROM_CAMERA: 
      if (resultCode == Activity.RESULT_OK) 
      { 
       Bundle extras = data.getExtras(); 
       Bitmap imageBitmap = (Bitmap) extras.get("data"); 

       Intent captureIntent = new Intent(MainActivity.this, ImageViewerActivity.class); 
       captureIntent.putExtra("data", imageBitmap); 
       startActivity(captureIntent); 

      } 
      break; 

     case PICK_FROM_GALLERY: 
      if (resultCode == Activity.RESULT_OK) 
      { 
       Uri selectedImage = data.getData(); 
       String[] filePathColumn = { MediaStore.Images.Media.DATA }; 

       Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); 
       cursor.moveToFirst(); 

       int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
       String picturePath = cursor.getString(columnIndex); 
       cursor.close(); 

       Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); 
       ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
       bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); 
       byte[] byteArray = stream.toByteArray(); 

       Intent intent = new Intent(this, ImageViewerActivity.class); 
       intent.putExtra("picture", byteArray); 
       startActivity(intent); 
      } 
      break; 
    } 
} 

    public String getPath(Uri uri) { 

     // just some safety built in 
     if(uri == null) { 
      // TODO perform some logging or show user feedback 
      return null; 
     } 
     // try to retrieve the image from the media store first 
     // this will only work for images selected from gallery 
     String[] projection = { MediaStore.Images.Media.DATA }; 
     Cursor cursor = managedQuery(uri, projection, null, null, null); 
     if(cursor != null){ 
      int column_index = cursor 
      .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
      cursor.moveToFirst(); 
      return cursor.getString(column_index); 
     } 
     // this is our fallback here 
     return uri.getPath(); 
    } 

public class ImageViewerActivity extends Activity { 

public static ImageView imageView; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.photo_view); 

    imageView = (ImageView)findViewById(R.id.imageView); 
    getData(); 

} 

private void getData() { 
    // TODO Auto-generated method stub 

     if(//image is from camera) 
     { 
      Intent intent = getIntent(); 
      Bitmap bitmap = (Bitmap) intent.getParcelableExtra("data"); 
      imageView.setImageBitmap(bitmap); 
     } 


     if(//image is from gallery) 
     { 
      Bundle extras = getIntent().getExtras(); 
      byte[] byteArray = extras.getByteArray("picture"); 

      Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length); 
      imageView.setImageBitmap(bmp);  
     } 
} 

需要任何幫助!非常感謝!

+0

有什麼問題?請更具體地處理您的問題,以便我們更容易地幫助您 – 2014-11-01 10:26:51

+0

我不知道如何告訴getData()方法無論圖像是來自圖庫還是相機。正如你現在可以看到,如果句子是空的。 – user10101 2014-11-01 10:30:19

+0

當然,如果傳遞照片意圖的方式比byteArray更好,我對任何事情都是開放的。我剛剛發現了這個代碼,並決定嘗試一下。 – user10101 2014-11-01 10:35:46

回答

0

在你的臨時演員中,你可以傳遞另一個帶有「INTENT_FROM」的字段,並把一個帶有標識符= CAMERA,GALLERY或其他的字符串。

要安裝它,送你的意圖之前,創建一個包並將其添加到將要發送,這樣的意圖:

Intent mIntent = new Intent(this, Example.class); 
Bundle mBundle = new Bundle(); 
mBundle.putString(key, value); 
mIntent.putExtras(mBundle); 

你可以找到提示,在這裏管理包。

Passing a Bundle on startActivity()?

我希望這會幫助你!

相關問題