這里介紹在Android中實(shí)現(xiàn)相機(jī)調(diào)取、拍照片、獲取照片、存儲新路徑等已經(jīng)打開相冊、選擇照片等功能
首先看一下界面,很簡單

配置讀取內(nèi)存卡和調(diào)用照相頭的功能
<!-- 使用網(wǎng)絡(luò)權(quán)限 --><uses-permission android:name="android.permission.INTERNET"/><!-- 寫sd卡的權(quán)限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><!-- 讀sd卡權(quán)限 --><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
下面是代碼的主題
public class TakePhotos extends Activity implementsandroid.view.View.OnClickListener {Button takePhoto;Bitmap photo;String picPath;Button capture;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_photo);takePhoto = (Button) findViewById(R.id.button1);capture = (Button) findViewById(R.id.capture);takePhoto.setOnClickListener(this);capture.setOnClickListener(this);}@Overridepublic void onClick(View viewid) {switch (viewid.getId()) {case R.id.button1: {// 打開相機(jī)String state = Environment.getExternalStorageState();// 獲取內(nèi)存卡可用狀態(tài)if (state.equals(Environment.MEDIA_MOUNTED)) {// 內(nèi)存卡狀態(tài)可用Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");startActivityForResult(intent, 1);} else {// 不可用Toast.makeText(TakePhotos.this, "內(nèi)存不可用", Toast.LENGTH_LONG).show();}break;}case R.id.capture: {// 打開相冊// 打開本地相冊Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);// 設(shè)定結(jié)果返回startActivityForResult(i, 2);break;}default:break;}}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {// TODO Auto-generated method stubsuper.onActivityResult(requestCode, resultCode, data);if (data != null) {switch (requestCode) {case 1:// 兩種方式 獲取拍好的圖片if (data.getData() != null || data.getExtras() != null) { // 防止沒有返回結(jié)果Uri uri = data.getData();if (uri != null) {this.photo = BitmapFactory.decodeFile(uri.getPath()); // 拿到圖片}if (photo == null) {Bundle bundle = data.getExtras();if (bundle != null) {photo = (Bitmap) bundle.get("data");FileOutputStream fileOutputStream = null;try {// 獲取 SD 卡根目錄 生成圖片并String saveDir = Environment.getExternalStorageDirectory()+ "/dhj_Photos";// 新建目錄File dir = new File(saveDir);if (!dir.exists())dir.mkdir();// 生成文件名SimpleDateFormat t = new SimpleDateFormat("yyyyMMddssSSS");String filename = "MT" + (t.format(new Date()))+ ".jpg";// 新建文件File file = new File(saveDir, filename);// 打開文件輸出流fileOutputStream = new FileOutputStream(file);// 生成圖片文件this.photo.compress(Bitmap.CompressFormat.JPEG,100, fileOutputStream);// 相片的完整路徑this.picPath = file.getPath();ImageView imageView = (ImageView) findViewById(R.id.imageView1);imageView.setImageBitmap(this.photo);} catch (Exception e) {e.printStackTrace();} finally {if (fileOutputStream != null) {try {fileOutputStream.close();} catch (Exception e) {e.printStackTrace();}}}Toast.makeText(getApplicationContext(), "獲取到了",Toast.LENGTH_SHORT).show();} else {Toast.makeText(getApplicationContext(), "找不到圖片",Toast.LENGTH_SHORT).show();}}}break;case 2: {//打開相冊并選擇照片,這個(gè)方式選擇單張// 獲取返回的數(shù)據(jù),這里是android自定義的Uri地址Uri selectedImage = data.getData();String[] filePathColumn = { MediaStore.Images.Media.DATA };// 獲取選擇照片的數(shù)據(jù)視圖Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null);cursor.moveToFirst();// 從數(shù)據(jù)視圖中獲取已選擇圖片的路徑int columnIndex = cursor.getColumnIndex(filePathColumn[0]);String picturePath = cursor.getString(columnIndex);cursor.close();// 將圖片顯示到界面上ImageView imageView = (ImageView) findViewById(R.id.imageView1);imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));break;}default:break;}}}}注釋的很詳細(xì),自己分析吧。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。
新聞熱點(diǎn)
疑難解答
圖片精選