Android获取本地图片或拍照上传

    xiaoxiao2021-03-25  67

    最近项目中由于有身份验证这个功能(第三方验证按次收费),由于公司吝啬,要求上传照片进行人工校验,故写下这个功能,结合网上的介绍。废话少说上代码

    这是布局:

    接着上Activity代码 import android.app.Activity; import android.content.ContentResolver; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.support.v7.app.AppCompatActivity; import android.view.Gravity; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.Toast; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import butterknife.Bind; import butterknife.ButterKnife; import butterknife.OnClick; import static itheima.com.myapplication.R.id.img; public class MainActivity extends AppCompatActivity { @Bind(img) ImageView mImg; @Bind(R.id.img_content) EditText mImgContent; @Bind(R.id.natives) Button mNatives; @Bind(R.id.pai) Button mPai; @Bind(R.id.submit) Button mSubmit; private ImageView mPic; private static String srcPath; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this);//ButterFly Knife插件 } @OnClick({R.id.natives, R.id.pai, R.id.submit}) public void onClick(View view) { switch (view.getId()) { case R.id.natives: Intent local = new Intent(); local.setType("image/*"); local.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(local, 2); break; case R.id.pai: Intent it = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(it, 1); break; case R.id.submit: if (srcPath == null || srcPath=="") { Toast.makeText(this, "文件不存在", Toast.LENGTH_SHORT).show(); }else{ submitUploadFile(); } break; } } private void submitUploadFile() { //上传到网络逻辑 } /** * 拍照上传 */ protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK) { switch(requestCode) { case 1: Bundle extras = data.getExtras(); Bitmap b = (Bitmap) extras.get("data"); mImg.setImageBitmap(b); String name = new SimpleDateFormat("yyyyMMddhhmmss").format(new Date()); String fileNmae = Environment.getExternalStorageDirectory().toString()+ File.separator+"dong/image/"+name+".jpg"; srcPath = fileNmae; System.out.println(srcPath+"----------保存路径1"); File myCaptureFile =new File(fileNmae); try { if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ if(!myCaptureFile.getParentFile().exists()){ myCaptureFile.getParentFile().mkdirs(); } BufferedOutputStream bos; bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile)); b.compress(Bitmap.CompressFormat.JPEG, 80, bos); bos.flush(); bos.close(); }else{ Toast toast= Toast.makeText(this, "保存失败,SD卡无效", Toast.LENGTH_SHORT); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } break; case 2: Uri uri = data.getData(); mImg.setImageURI(uri); ContentResolver cr = this.getContentResolver(); Cursor c = cr.query(uri, null, null, null, null); c.moveToFirst(); //这是获取的图片保存在sdcard中的位置 srcPath = c.getString(c.getColumnIndex("_data")); System.out.println(srcPath+"----------保存路径2"); break; default: break; }; } } }

    转载请注明原文地址: https://ju.6miu.com/read-32639.html

    最新回复(0)