第一:拍照選擇界面:
Java代碼
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;
public class SelectPicPopupWindow extends Activity implementsOnClickListener {
private Button btn_take_photo, btn_pick_photo,btn_cancel;
private LinearLayout layout;
private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.alert_dialog);
intent = getIntent();
btn_take_photo = (Button) this.findViewById(R.id.btn_take_photo);
btn_pick_photo = (Button) this.findViewById(R.id.btn_pick_photo);
btn_cancel = (Button) this.findViewById(R.id.btn_cancel);
layout = (LinearLayout) findViewById(R.id.pop_layout);
// 添加選擇窗口範圍監聽可以優先獲取觸點,即不再執行onTouchEvent()函數,點擊其他地方時執行onTouchEvent()函數銷燬Activity
layout.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "提示:點擊窗口外部關閉窗口!",
Toast.LENGTH_SHORT).show();
}
});
// 添加按鈕監聽
btn_cancel.setOnClickListener(this);
btn_pick_photo.setOnClickListener(this);
btn_take_photo.setOnClickListener(this);
}
// 實現onTouchEvent觸屏函數但點擊屏幕時銷燬本Activity
@Override
public boolean onTouchEvent(MotionEvent event) {
finish();
return true;
}
@Override
protected void onActivityResult(int requestCode, intresultCode, Intent data) {
if (resultCode != RESULT_OK) {
return;
}
//選擇完或者拍完照後會在這裏處理,然後我們繼續使用setResult返回Intent以便可以傳遞數據和調用
if (data.getExtras() != null)
intent.putExtras(data.getExtras());
if (data.getData()!= null)
intent.setData(data.getData());
setResult(1, intent);
finish();
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_take_photo:
try {
//拍照我們用Action爲MediaStore.ACTION_IMAGE_CAPTURE,
//有些人使用其他的Action但我發現在有些機子中會出問題,所以優先選擇這個
Intent intent = newIntent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 1);
} catch (Exception e) {
e.printStackTrace();
}
break;
case R.id.btn_pick_photo:
try {
//選擇照片的時候也一樣,我們用Action爲Intent.ACTION_GET_CONTENT,
//有些人使用其他的Action但我發現在有些機子中會出問題,所以優先選擇這個
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, 2);
} catch (ActivityNotFoundException e) {
}
break;
case R.id.btn_cancel:
finish();
break;
default:
break;
}
}
}
第二:顯示照片界面:
Java代碼
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
public class MainActivity extends Activity {
private ImageView photo;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
photo = (ImageView) this.findViewById(R.id.text);
// 把文字控件添加監聽,點擊彈出自定義窗口
photo.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//使用startActivityForResult啓動SelectPicPopupWindow當返回到此Activity的時候就會調用onActivityResult函數
startActivityForResult(new Intent(MainActivity.this,
SelectPicPopupWindow.class), 1);
}
});
}
@Override
protected void onActivityResult(int requestCode, intresultCode, Intent data) {
switch (resultCode) {
case 1:
if (data != null) {
//取得返回的Uri,基本上選擇照片的時候返回的是以Uri形式,但是在拍照中有得機子呢Uri是空的,所以要特別注意
Uri mImageCaptureUri = data.getData();
//返回的Uri不爲空時,那麼圖片信息數據都會在Uri中獲得。如果爲空,那麼我們就進行下面的方式獲取
if (mImageCaptureUri != null) {
Bitmap image;
try {
//這個方法是根據Uri獲取Bitmap圖片的靜態方法
image = MediaStore.Images.Media.getBitmap(this.getContentResolver(),mImageCaptureUri);
if (image != null) {
photo.setImageBitmap(image);
}
} catch (Exception e) {
e.printStackTrace();
}
} else {
Bundle extras = data.getExtras();
if (extras != null) {
//這裏是有些拍照後的圖片是直接存放到Bundle中的所以我們可以從這裏面獲取Bitmap圖片
Bitmap image = extras.getParcelable("data");
if (image != null) {
photo.setImageBitmap(image);
}
}
}
}
break;
default:
break;
}
}
}
第三:如果需要保存圖片到SD卡或者上傳圖片可以用下面代碼:
Java代碼
public static String savePicToSdcard(Bitmap bitmap,String path,
String fileName) {
String filePath = "";
if (bitmap == null) {
return filePath;
} else {
filePath=path+ fileName;
File destFile = new File(filePath);
OutputStream os = null;
try {
os = new FileOutputStream(destFile);
bitmap.compress(CompressFormat.JPEG, 100, os);
os.flush();
os.close();
} catch (IOException e) {
filePath = "";
}
}
return filePath;
}
上傳圖片的話我們可以獲取bitmap的流然後上傳,如上面方式獲取,如要上傳,上傳代碼自己實現,這個比較簡單。