日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android8.0以上打开相机并裁剪图片

發布時間:2023/12/8 Android 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android8.0以上打开相机并裁剪图片 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android7.0以上打開相機的權限更加嚴格了,有很多博客也是講這些具體操作的,如果想更深入了解,請自行搜索,這里我只是列出使用的方法,第一行代碼第二版的內容,打開相機的權限是基于android7.0,如果完整的按照書上內容寫個demo,是可以實現的。這里面我綜合了書上的內容,在加上從幾篇博客上的總結,寫了一個測試的Demo,運行在真機上是沒問題(android8.0)。
下面說一下步驟
1、在AndroidManifest.xml文件下的《application》標簽中定義一個《provider》內容提供者。

<providerandroid:name="android.support.v4.content.FileProvider"android:authorities="你自己的包名"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/provider_paths"/></provider>

2、在res文件目錄下創建一個xml文件夾,里面生成一個provider_paths.xml文件

<paths xmlns:android="http://schemas.android.com/apk/res/android"><!--"."表示所有路徑--><external-path name="名字隨便填" path="."/></paths>

3、打開相機`

private void openCamera() {//創建一個保存圖片的路徑File outputImage = new File(getExternalCacheDir(), "output_image.jpg");try {if (outputImage.exists()) {outputImage.delete();}outputImage.createNewFile();} catch (IOException e) {e.printStackTrace();}//如果android7.0以上的系統,需要做個判斷if (Build.VERSION.SDK_INT >= 24) {ImageUri = FileProvider.getUriForFile(MainActivity.this, "com.example.myapplication.provider", outputImage);//7.0} else {ImageUri = Uri.fromFile(outputImage); //7.0以下}//利用隱式Intent 打開系統相機Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");intent.putExtra(MediaStore.EXTRA_OUTPUT, ImageUri);startActivityForResult(intent, TAKE_PHOTO);//這里的TAKE_PHOTO是定義的一個靜態常數變量 }

4、由于是startActivityForResult啟動的系統相機,所以照完的照片可以用onActivityResult方法接受。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {switch (requestCode) {//截取相機拍照后的圖片case TAKE_PHOTO:startPhotoZoom(ImageUri);//這里調用了截取圖片的方法break;//返回截取后的結果case RESULT_REQUEST_CODE:if (resultCode == RESULT_OK) {try {Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(ImageUri));imageButton.setImageBitmap(bitmap);} catch (FileNotFoundException e) {e.printStackTrace();}}break;

4.1、截取圖片的方法startPhotoZoom

private void startPhotoZoom(Uri uri) {File CropPhoto = new File(getExternalCacheDir(), "Crop.jpg");//這個是創建一個截取后的圖片路徑和名稱。try {if (CropPhoto.exists()) {CropPhoto.delete();}CropPhoto.createNewFile();} catch (IOException e) {e.printStackTrace();}ImageUri = Uri.fromFile(CropPhoto);Intent intent = new Intent("com.android.camera.action.CROP");intent.setDataAndType(uri, "image/*");if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); //添加這一句表示對目標應用臨時授權該Uri所代表的文件}intent.putExtra("crop", "true");intent.putExtra("scale", true);intent.putExtra("aspectX", 1);intent.putExtra("aspectY", 1);//輸出的寬高intent.putExtra("outputX", 300);intent.putExtra("outputY", 300);intent.putExtra("return-data", false);intent.putExtra(MediaStore.EXTRA_OUTPUT, ImageUri);intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());intent.putExtra("noFaceDetection", true); // no face detectionstartActivityForResult(intent, RESULT_REQUEST_CODE);//這里的RESULT_REQUEST_CODE是在startActivityForResult里使用的返回值。}

總結

以上是生活随笔為你收集整理的Android8.0以上打开相机并裁剪图片的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。