Android應(yīng)用中如何將頭像保存到本地服務(wù)器?相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
創(chuàng)新互聯(lián)長(zhǎng)期為1000多家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為云岡企業(yè)提供專業(yè)的成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè),云岡網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。
具體代碼如下所述:
/** * 1、實(shí)現(xiàn)原理:用戶打開(kāi)相冊(cè)或相機(jī)選擇相片后,相片經(jīng)過(guò)壓縮并設(shè)置在控件上,圖片在本地sd卡存一份(如果有的話,沒(méi)有則內(nèi)部存儲(chǔ),所以還 * 需要判斷用戶是否掛載了sd卡),然后在服務(wù)器上存儲(chǔ)一份該圖片,當(dāng)下次再次啟動(dòng)應(yīng)用時(shí),會(huì)默認(rèn)去sd卡加載該圖片,如果本地沒(méi)有,再會(huì)去聯(lián)網(wǎng)請(qǐng)求 * 2、使用了picasso框架以及自定義BitmapUtils工具類 * 3、記得加上相關(guān)權(quán)限 * <uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> * */ public class MainActivity extends AppCompatActivity implements View.OnClickListener { private ImageView iv;//要設(shè)置的頭像 private Button btn_photo;//調(diào)用相冊(cè)按鈕 private Button btn_camera;//調(diào)用相機(jī)按鈕 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iv=(ImageView) findViewById(R.id.iv); btn_photo = (Button) findViewById(R.id.btn_photo); btn_camera = (Button) findViewById(R.id.btn_camera); btn_photo.setOnClickListener(this); btn_camera.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_photo://打開(kāi)系統(tǒng)相冊(cè) Intent intent=new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent,100); break; case R.id.btn_camera://打開(kāi)系統(tǒng)相機(jī) Intent intent2=new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent2,200); break; } } @RequiresApi(api = Build.VERSION_CODES.KITKAT) @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode==100&&resultCode==RESULT_OK&&data!=null){//系統(tǒng)相冊(cè) Uri imageData = data.getData(); String path=getPath(imageData); Bitmap bitmap = BitmapFactory.decodeFile(path); Bitmap bitmap1 = BitmapUtils.zoom(bitmap, iv.getWidth(), iv.getHeight()); Bitmap bitmap2 = BitmapUtils.circleBitmap(bitmap1); //加載顯示 iv.setImageBitmap(bitmap2); //bitmap圖片上傳到服務(wù)器...... //bitmap圖片保存到本地 saveImage(bitmap2); }else if(requestCode==200&&resultCode==RESULT_OK&&data!=null){//系統(tǒng)相機(jī) Bitmap bitmap = (Bitmap) data.getExtras().get("data"); BitmapUtils.zoom(bitmap,iv.getWidth(),iv.getHeight()); bitmap=BitmapUtils.circleBitmap(bitmap); //加載顯示 iv.setImageBitmap(bitmap); //bitmap圖片上傳到服務(wù)器...... //bitmap圖片保存到本地 saveImage(bitmap); } } /** * 數(shù)據(jù)的存儲(chǔ)。(5種) * Bimap:內(nèi)存層面的圖片對(duì)象。 * * 存儲(chǔ)--->內(nèi)存: * BitmapFactory.decodeFile(String filePath); * BitmapFactory.decodeStream(InputStream is); * 內(nèi)存--->存儲(chǔ): * bitmap.compress(Bitmap.CompressFormat.PNG,100,OutputStream os); */ private void saveImage(Bitmap bitmap) { File filesDir; if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){//判斷sd卡是否掛載 //路徑1:storage/sdcard/Android/data/包名/files filesDir = this.getExternalFilesDir(""); }else{//手機(jī)內(nèi)部存儲(chǔ) //路徑:data/data/包名/files filesDir = this.getFilesDir(); } FileOutputStream fos = null; try { File file = new File(filesDir,"icon.png"); fos = new FileOutputStream(file); bitmap.compress(Bitmap.CompressFormat.PNG, 100,fos); } catch (FileNotFoundException e) { e.printStackTrace(); }finally{ if(fos != null){ try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } } //如果本地有,就不需要再去聯(lián)網(wǎng)去請(qǐng)求 private boolean readImage() { File filesDir; if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){//判斷sd卡是否掛載 //路徑1:storage/sdcard/Android/data/包名/files filesDir = getExternalFilesDir(""); }else{//手機(jī)內(nèi)部存儲(chǔ) //路徑:data/data/包名/files filesDir = getFilesDir(); } File file = new File(filesDir,"icon.png"); if(file.exists()){ //存儲(chǔ)--->內(nèi)存 Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); iv.setImageBitmap(bitmap); return true; } return false; } @RequiresApi(api = Build.VERSION_CODES.KITKAT) private String getPath(Uri uri) { int sdkVersion = Build.VERSION.SDK_INT; //高于4.4.2的版本 if (sdkVersion >= 19) { Log.e("TAG", "uri auth: " + uri.getAuthority()); if (isExternalStorageDocument(uri)) { String docId = DocumentsContract.getDocumentId(uri); String[] split = docId.split(":"); String type = split[0]; if ("primary".equalsIgnoreCase(type)) { return Environment.getExternalStorageDirectory() + "/" + split[1]; } } else if (isDownloadsDocument(uri)) { final String id = DocumentsContract.getDocumentId(uri); final Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id)); return getDataColumn(this, contentUri, null, null); } else if (isMediaDocument(uri)) { final String docId = DocumentsContract.getDocumentId(uri); final String[] split = docId.split(":"); final String type = split[0]; Uri contentUri = null; if ("image".equals(type)) { contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; } else if ("video".equals(type)) { contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; } else if ("audio".equals(type)) { contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; } final String selection = "_id=?"; final String[] selectionArgs = new String[]{split[1]}; return getDataColumn(this, contentUri, selection, selectionArgs); } else if (isMedia(uri)) { String[] proj = {MediaStore.Images.Media.DATA}; Cursor actualimagecursor = this.managedQuery(uri, proj, null, null, null); int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); actualimagecursor.moveToFirst(); return actualimagecursor.getString(actual_image_column_index); } } else if ("content".equalsIgnoreCase(uri.getScheme())) { // Return the remote address if (isGooglePhotosUri(uri)) return uri.getLastPathSegment(); return getDataColumn(this, uri, null, null); } // File else if ("file".equalsIgnoreCase(uri.getScheme())) { return uri.getPath(); } return null; } /** * uri路徑查詢字段 * * @param context * @param uri * @param selection * @param selectionArgs * @return */ public static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) { Cursor cursor = null; final String column = "_data"; final String[] projection = {column}; try { cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null); if (cursor != null && cursor.moveToFirst()) { final int index = cursor.getColumnIndexOrThrow(column); return cursor.getString(index); } } finally { if (cursor != null) cursor.close(); } return null; } private boolean isExternalStorageDocument(Uri uri) { return "com.android.externalstorage.documents".equals(uri.getAuthority()); } public static boolean isDownloadsDocument(Uri uri) { return "com.android.providers.downloads.documents".equals(uri.getAuthority()); } public static boolean isMediaDocument(Uri uri) { return "com.android.providers.media.documents".equals(uri.getAuthority()); } public static boolean isMedia(Uri uri) { return "media".equals(uri.getAuthority()); } /** * @param uri The Uri to check. * @return Whether the Uri authority is Google Photos. */ public static boolean isGooglePhotosUri(Uri uri) { return "com.google.android.apps.photos.content".equals(uri.getAuthority()); } /** * 判斷本地是否有該圖片,沒(méi)有則去聯(lián)網(wǎng)請(qǐng)求 * */ @Override protected void onResume() { super.onResume(); if(readImage()){ return; } } } //BitmapUtils工具類public class BitmapUtils { /** * 該方法用于將圖片進(jìn)行圓形處理 * */ public static Bitmap circleBitmap(Bitmap source){ //默認(rèn)只對(duì)寬進(jìn)行處理 int width=source.getWidth(); Bitmap bitmap=Bitmap.createBitmap(width,width,Bitmap.Config.ARGB_8888); Canvas canvas=new Canvas(bitmap); Paint paint=new Paint(); //設(shè)置抗鋸齒 paint.setAntiAlias(true); canvas.drawCircle(width/2,width/2,width/2,paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(source,0,0,paint); return bitmap; } /** * 該方法用于圖片壓縮處理,注意width、height參數(shù)的類型必須是float * */ public static Bitmap zoom(Bitmap source,float width,float height){ Matrix matrix=new Matrix(); //圖片進(jìn)行壓縮處理 matrix.postScale(width/source.getWidth(),height/source.getHeight()); Bitmap bitmap = Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, false); return bitmap; }}
看完上述內(nèi)容,你們掌握Android應(yīng)用中如何將頭像保存到本地服務(wù)器的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
文章名稱:Android應(yīng)用中如何將頭像保存到本地服務(wù)器
文章網(wǎng)址:http://muchs.cn/article38/ihsssp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開(kāi)發(fā)、網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、云服務(wù)器、營(yíng)銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)