import android.app.Activity;
import android.app.AlertDialog;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.ContextThemeWrapper;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.Toast;
public class TestPhotoActivity extends Activity implements OnClickListener
{
private static final String TAG = "TestPhotoActivity";
/* 用来标识请求照相功能的activity */
private static final int CAMERA_WITH_DATA = 3023;
/* 用来标识请求gallery的activity */
private static final int PHOTO_PICKED_WITH_DATA = 3021;
Button buttonOK;
ImageView imageViewPhoto;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
buttonOK = (Button) findViewById(R.id.ButtonOK);
imageViewPhoto = (ImageView) findViewById(R.id.imageViewPhoto);
buttonOK.setOnClickListener(this);
}
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
switch (v.getId())
{
case R.id.ButtonOK:
doPickPhotoAction();
break;
default:
break;
}
}
private void doPickPhotoAction()
{
Context context = TestPhotoActivity.this;
// Wrap our context to inflate list items using correct theme
final Context dialogContext = new ContextThemeWrapper(context,
android.R.style.Theme_Light);
String cancel = "返回";
String[] choices;
choices = new String[2];
choices[0] = getString(R.string.take_photo); //拍照
choices[1] = getString(R.string.pick_photo); //从相册中选择
final ListAdapter adapter = new ArrayAdapter<String>(dialogContext,
android.R.layout.simple_list_item_1, choices);
final AlertDialog.Builder builder = new AlertDialog.Builder(
dialogContext);
builder.setTitle(R.string.attachToContact);
builder.setSingleChoiceItems(adapter, -1,
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
dialog.dismiss();
switch (which)
{
case 0:
{
String status = Environment
.getExternalStorageState();
if (status.equals(Environment.MEDIA_MOUNTED))
{//判断是否有SD卡
doTakePhoto();// 用户点击了从照相机获取
}
else
{
Toast.makeText(TestPhotoActivity.this, "没有SD卡",
Toast.LENGTH_LONG).show();
}
break;
}
case 1:
doPickPhotoFromGallery();// 从相册中去获取
break;
}
}
});
builder.setNegativeButton(cancel, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
dialog.dismiss();
}
});
builder.create().show();
}
/**
* 拍照获取图片
*
*/
protected void doTakePhoto()
{
try
{
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE, null);
//直接使用,没有缩小
startActivityForResult(intent, CAMERA_WITH_DATA);
}
catch (ActivityNotFoundException e)
{
Toast.makeText(this, R.string.photoPickerNotFoundText,
Toast.LENGTH_LONG).show();
}
}
// 请求Gallery程序
protected void doPickPhotoFromGallery()
{
try
{
final Intent intent = getPhotoPickIntent();
startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);
}
catch (ActivityNotFoundException e)
{
Toast.makeText(this, R.string.photoPickerNotFoundText1,
Toast.LENGTH_LONG).show();
}
}
// // 封装请求Gallery的intent
public static Intent getPhotoPickIntent()
{
Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
intent.setType("image/*");
return intent;
}
// 因为调用了Camera和Gally所以要判断他们各自的返回情况,他们启动时是这样的startActivityForResult
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (resultCode != RESULT_OK)
return;
switch (requestCode)
{
case PHOTO_PICKED_WITH_DATA:
Uri uri = data.getData();
String selectedImagePath = getPath(uri);
Log.e(TAG, "1111111111" + selectedImagePath);
//
imageViewPhoto.setImageURI(uri);
break;
case CAMERA_WITH_DATA:
Uri uri1 = data.getData();
Log.e(TAG, uri1.toString());
//
String selectedImagePath1 = getPath(uri1);
Log.e(TAG, "1111111111" + selectedImagePath1);
imageViewPhoto.setImageURI(uri1);
break;
}
}
public String getPath(Uri uri)
{
String[] projection = {MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
}