返回顶部
首页 > 资讯 > 服务器 >Android实现调用系统图库与相机设置头像并保存在本地及服务器
  • 304
分享到

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

服务器调用系统相机Android 2022-06-06 11:06:08 304人浏览 独家记忆
摘要

废话不多说了,直接给大家贴代码了,具体代码如下所述: public class MainActivity extends AppCompatActivity impleme

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



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实现调用系统图库与相机设置头像并保存在本地及服务器 ,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

您可能感兴趣的文章:Android实现本地上传图片并设置为圆形头像Android使用CircleImageView实现圆形头像的方法Android根据电话号码获得联系人头像实例代码Android实现用户头像更换操作Android实现从本地图库/相机拍照后裁剪图片并设置头像Android手机拍照或选取图库图片作为头像Android一行代码实现圆形头像Android实现个人资料页面头像背景模糊显示包(状态栏)Android头像上传功能的实现代码(获取头像加剪切)Android实现IM多人员组合的群组头像


--结束END--

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

本文链接: https://lsjlt.com/news/28304.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作