栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

Android实现调用系统图库与相机设置头像并保存在本地及服务器

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android实现调用系统图库与相机设置头像并保存在本地及服务器

废话不多说了,直接给大家贴代码了,具体代码如下所述:


public class MainActivity extends AppCompatActivity implements View.onClickListener {
  private ImageView iv;//要设置的头像
  private Button btn_photo;//调用相册按钮
  private Button btn_camera;//调用相机按钮
  @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://打开系统相册
 Intent intent=new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
 startActivityForResult(intent,100);
 break;
      case R.id.btn_camera://打开系统相机
 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){//系统相册
      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图片上传到服务器......
      //bitmap图片保存到本地
      saveImage(bitmap2);
    }else if(requestCode==200&&resultCode==RESULT_OK&&data!=null){//系统相机
      Bitmap bitmap = (Bitmap) data.getExtras().get("data");
      BitmapUtils.zoom(bitmap,iv.getWidth(),iv.getHeight());
      bitmap=BitmapUtils.circleBitmap(bitmap);
      //加载显示
      iv.setImageBitmap(bitmap);
      //bitmap图片上传到服务器......
      //bitmap图片保存到本地
      saveImage(bitmap);
    }
  }
  
  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{//手机内部存储
      //路径: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();
 }
      }
    }
  }
  //如果本地有,就不需要再去联网去请求
  private boolean readImage() {
    File filesDir;
    if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){//判断sd卡是否挂载
      //路径1:storage/sdcard/Android/data/包名/files
      filesDir = getExternalFilesDir("");
    }else{//手机内部存储
      //路径:data/data/包名/files
      filesDir = getFilesDir();
    }
    File file = new File(filesDir,"icon.png");
    if(file.exists()){
      //存储--->内存
      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;
  }
  
  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());
  }
  
  public static boolean isGooglePhotosUri(Uri uri) {
    return "com.google.android.apps.photos.content".equals(uri.getAuthority());
  }
  
  @Override
  protected void onResume() {
    super.onResume();
    if(readImage()){
      return;
    }
  }
}
//BitmapUtils工具类public class BitmapUtils {   public static Bitmap circleBitmap(Bitmap source){    //默认只对宽进行处理    int width=source.getWidth();    Bitmap bitmap=Bitmap.createBitmap(width,width,Bitmap.Config.ARGB_8888);    Canvas canvas=new Canvas(bitmap);    Paint paint=new Paint();    //设置抗锯齿    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;  }    public static Bitmap zoom(Bitmap source,float width,float height){    Matrix matrix=new Matrix();    //图片进行压缩处理    matrix.postScale(width/source.getWidth(),height/source.getHeight());    Bitmap bitmap = Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, false);    return bitmap;  }}

以上所述是小编给大家介绍的Android实现调用系统图库与相机设置头像并保存在本地及服务器 ,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/159500.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号