Android拍照、图库多选图上传——实现方法与注意事项

Android手机拍照、图库多选图上传是手机APP中常用的功能,它使得用户能够轻松地将手机中的照片上传到互联网上。本文将介绍这一功能的实现步骤。

首先,我们需要在AndroidManifest.xml文件中添加以下权限:

```

```

然后,在MainActivity中添加以下代码:

```java

private static final int PICK_IMAGE_REQUEST = 1;

private static final int CAMERA_REQUEST = 2;

private Uri mImageUri;

Button btnChoose, btnCamera, btnUpload;

ImageView imageView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

btnChoose = (Button) findViewById(R.id.btnChoose);

btnCamera = (Button) findViewById(R.id.btnCamera);

btnUpload = (Button) findViewById(R.id.btnUpload);

imageView = (ImageView) findViewById(R.id.imageView);

btnChoose.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Intent intent = new Intent();

intent.setType("image/*");

intent.setAction(Intent.ACTION_GET_CONTENT);

startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);

}

});

btnCamera.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

if (takePictureIntent.resolveActivity(getPackageManager()) != null) {

File photoFile = null;

try {

photoFile = createImageFile();

} catch (IOException ex) {

// Error occurred while creating the File

}

if (photoFile != null) {

mImageUri = FileProvider.getUriForFile(MainActivity.this,

"com.example.android.fileprovider",

photoFile);

takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri);

startActivityForResult(takePictureIntent, CAMERA_REQUEST);

}

}

}

});

btnUpload.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

// TODO: Upload image to server

}

});

}

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {

mImageUri = data.getData();

try {

Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), mImageUri);

imageView.setImageBitmap(bitmap);

} catch (IOException e) {

e.printStackTrace();

}

}

if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {

try {

Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), mImageUri);

imageView.setImageBitmap(bitmap);

} catch (IOException e) {

e.printStackTrace();

}

}

}

private File createImageFile() throws IOException {

// Create an image file name

String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());

String imageFileName = "JPEG_" + timeStamp + "_";

File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);

File image = File.createTempFile(

imageFileName, /* prefix */

".jpg", /* suffix */

storageDir /* directory */

);

// Save a file: path for use with ACTION_VIEW intents

String mCurrentPhotoPath = image.getAbsolutePath();

return image;

}

```

以上代码实现了三个按钮的功能:选择图片、拍照、上传图片。在选择图片时,打开系统的图库应用,让用户选择一张图片;在拍照时,打开相机应用,让用户拍照;上传图片的功能需要开发者自行实现。

在实现选择图片和拍照功能时,需要注意Android 7.0及以上版本的权限问题。在Android 7.0中,系统不再允许使用file:// URI 访问其他应用的文件,应使用FileProvider来共享文件,具体操作可以参考Android官方文档。

总之,实现Android拍照、图库多选图上传功能并不难,开发者只需要按照以上步骤进行操作即可。