這里主要介紹如何調用系統的手機進行拍照,或者直接從相冊中找圖片。
權限
在Android4.4系統之前,訪問SD卡的應用關聯目錄要聲明權限,之后就可以不用聲明了,為了兼容老版本,還是聲明權限:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>代碼一:準備工作
public static final int TAKE_PHOTO =1; //表示打開相機的標識符,知己定義的 PRivate ImageView picture; //用來展示最后的圖片 private Uri imageUri; //表示圖片文件的真實路徑 ---------------接下來是打開相機前的準備工作------------------ File outputImage = new File(getExternalCacheDir(),"output_image.jpg"); //創建File對象,用于存貯拍照后的照片 //上述文件路徑打印出來如下: // /storage/emulated/0/Android/data/com.yuyi.viewevent/cache/output_image.jpg try { if (outputImage.exists()){ outputImage.delete();//如果已經有這個對象了,則刪除。 } outputImage.createNewFile();//在指定的路徑下創建一個新的空文件 } catch (IOException e) { e.printStackTrace(); } if (Build.VERSION.SDK_INT >= 24){ imageUri=FileProvider .getUriForFile(MainActivity.this,"com.yuyi.viewevent",outputImage); //參數一是:Context對象,參數二:任意的字符串,參數三:file對象 //詳細介紹,在最后面。 }else { imageUri = Uri.fromFile(outputImage); /**前面那個版本判斷如果運行低于7.0的就直接把file對象轉換成Uri對象, 得到一個本地真實路徑,如果7.0以上,直接使用本地真實路徑會認為不安全, 所以使用了FileProvider這個特殊的內容提供器,可以選擇性地將封裝過得 Uri共享給外部。 */ } //打印出imageUri的log如下: file:///storage/emulated/0/Android/data/com.yuyi.viewevent/cache/output_image.jpg //隱世意圖啟動相機 Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);//將uri傳遞進去 startActivityForResult(intent,TAKE_PHOTO);代碼二:對于拍照結果的處理
case TAKE_PHOTO: if (resultCode == RESULT_OK){ try { Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri)); //將存在本地的圖片進行讀取成為bitmap picture.setImageBitmap(bitmap); } catch (FileNotFoundException e) { e.printStackTrace(); } } break;代碼一
public static final int CHOOSE_PHOTO=2; //作為從相冊選取的標識符 private ImageView picture; //表示用于展示的圖片 private Uri imageUri; //表示文件的真實路徑代碼二
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_DENIED){ ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);//動態獲取權限 }else { openAlbum();//此方法表示主動去打開相冊 } /**在這里面完成的是先進行運行時權限處理,動態去獲取權限,因為相冊中的照片都是存儲 在SD卡上,我們要從SD卡中讀取照片就要這個權限,表示授予了程序對SD卡讀和寫的能力。*/先看看在4.4以上系統使用時候,如何處理圖片: 
新聞熱點
疑難解答