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

歡迎訪問 生活随笔!

生活随笔

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

Android

android 上传头像遇到的问题,Android 7.0 图片剪切问题,选择头像上传

發布時間:2024/10/14 Android 74 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 上传头像遇到的问题,Android 7.0 图片剪切问题,选择头像上传 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、 7.0文件地址傳輸的問題

異常信息:FileUriExposedException:

android:name="android.support.v4.content.FileProvider"android:authorities="應用報名.fileProvider"android:exported="false"android:grantUriPermissions="true">android:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/file_paths"/>

在res.下的xml文件:

文件名是:file_paths(和清單文件中一致)

xml version="1.0"encoding="utf-8"?>xmlns:android="http://schemas.android.com/apk/res/android">name="files_root"path="Android/data/com.lechuang.letaotao/"/>name="external_storage_root"path="."/>

在 傳輸過程中提供圖片地址:

public staticUri getUriForFile(Context context,File file) {

if(context == null|| file == null) {

throw newNullPointerException();}

Uri uri;if(Build.VERSION.SDK_INT>= 24) {

uri = FileProvider.getUriForFile(context,"應用包名.fileProvider",file);} else{

uri = Uri.fromFile(file);}

returnuri;}

打開照相機:

//android 7.0// Uri imageUri = FileProvider.getUriForFile(mContext, "應用包名.fileProvider", file);

// 7.0 以

// Uri uri = Uri.fromFile(file);

//適配7.0和7.0一下的地址Uri imageUri =

getUriForFile(

mContext

,

file)

;Intent intent =

newIntent()

;intent.addFlags(Intent.

FLAG_GRANT_READ_URI_PERMISSION)

;intent.setAction(MediaStore.

ACTION_IMAGE_CAPTURE)

;intent.putExtra(MediaStore.

EXTRA_OUTPUT

,imageUri)

; //把拍照后的圖片放在指定的文件intent.putExtra(MediaStore.

EXTRA_VIDEO_QUALITY

,

0)

;startActivityForResult(intent

,

2)

;

相冊選擇:

Intent intent = newIntent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI);intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,"image/*"); //*代表全部startActivityForResult(intent,1);

裁剪圖片:

public static voidresizeImage(Uri uri,Activity activity, intrequestCode) {

Intent intent = newIntent("com.android.camera.action.CROP");intent.setDataAndType(uri,"image/png"); //限定圖片類型intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); //重要 ,權限要求。intent.putExtra("crop","true");

//?aspectX?,?aspectY?:寬高的比例intent.putExtra("aspectX",1);intent.putExtra("aspectY",1);

//?outputX?,?outputY?:?裁剪圖片寬高intent.putExtra("outputX",150);intent.putExtra("outputY",150);intent.putExtra("return-data", true);activity.startActivityForResult(intent,requestCode);}

壓縮圖片:

private voidshowResizeImage(Intent data) {

Bundle extras = data.getExtras();if(extras != null) {

Bitmap bitmap = extras.getParcelable("data");String path = Uri.fromFile(file).getPath();bitmap =toSmall(bitmap,path);

}

}

壓縮處理的具體方法:

public staticBitmap toSmall(Bitmap bitmap,String path) {

intscale = 1;intwidth_tmp = bitmap.getWidth();intheight_tmp = bitmap.getHeight();while(true) {

if(width_tmp / 2< 100|| height_tmp / 2< 100)

break;width_tmp /= 2;height_tmp /= 2;scale *= 2;}

Matrix matrix = newMatrix();matrix.postScale(scale,scale);// 長和寬放大縮小的比例bitmap = Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),bitmap.getHeight(),matrix, true);try{

FileOutputStream fileOutputStream = newFileOutputStream(path);try{

bitmap.compress(Bitmap.CompressFormat.PNG,100,fileOutputStream);} finally{

try{

fileOutputStream.flush();fileOutputStream.close();} catch(IOException e) {

}

}

} catch(FileNotFoundException e) {

e.printStackTrace();}

returnbitmap;}

主界面的處理:

@Overridepublic voidonActivityResult(intrequestCode, intresultCode,Intent data) {

switch(requestCode) {

case1:

if(resultCode != -1) {

return;}

.resizeImage(data.getData(), this,3); //處理從相冊返回的信息:break;case2:

if(resultCode != -1) {

return;}

if(PhotoUtil.isSdcardExisting()) { //處理從照相機返回的圖片

Uri uriForFile = getUriForFile(mContext,file);resizeImage(uriForFile, this,3); //開始裁剪} else{

Utils.show(mContext,"未找到存儲卡,無法存儲照片");}

break;case3:

if(data != null) {

showResizeImage(data); // 壓縮圖片}

break;default:

break;}

super.onActivityResult(requestCode,resultCode,data);}

附 Android6.0 文件和照相機權限申請:

private static final intREQUEST_PERMISSION_CAMERA= 222;private static final intREQUEST_PERMISSION_STORAGE= 333;private voidsetCamear() {

if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.M) {

intcheckCallPhonePermission = ContextCompat.checkSelfPermission(mContext,Manifest.permission.CAMERA);if(checkCallPhonePermission != PackageManager.PERMISSION_GRANTED) {

ActivityCompat.requestPermissions(this, newString[]{Manifest.permission.CAMERA},REQUEST_PERMISSION_CAMERA);return;}

}

if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.M) {

intcheckCallPhonePermission = ContextCompat.checkSelfPermission(mContext,Manifest.permission.WRITE_EXTERNAL_STORAGE);if(checkCallPhonePermission != PackageManager.PERMISSION_GRANTED) {

ActivityCompat.requestPermissions(this, newString[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},REQUEST_PERMISSION_STORAGE);return;}

}

}

@Overridepublic voidonRequestPermissionsResult(intrequestCode,String[] permissions, int[] grantResults) {

switch(requestCode) {

//就像onActivityResult一樣這個地方就是判斷你是從哪來的。caseREQUEST_PERMISSION_CAMERA:

if(grantResults[0] == PackageManager.PERMISSION_GRANTED) {

} else{Utils.show(mContext,"很遺憾你把相機權限禁用了!");finish();}

break;caseREQUEST_PERMISSION_STORAGE:

if(grantResults[0] == PackageManager.PERMISSION_GRANTED) {

} else{

// Permission DeniedUtils.show(mContext,"很遺憾你把讀取文件權限禁用了!");finish();}

break;default:

super.onRequestPermissionsResult(requestCode,permissions,grantResults);}

}

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的android 上传头像遇到的问题,Android 7.0 图片剪切问题,选择头像上传的全部內容,希望文章能夠幫你解決所遇到的問題。

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