700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 打开相机拍照或从相册中选择照片

打开相机拍照或从相册中选择照片

时间:2022-06-19 18:03:38

相关推荐

打开相机拍照或从相册中选择照片

1.添加权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.CAMERA" />

2.界面布局

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"android:orientation="vertical"><ImageViewandroid:id="@+id/picture"android:layout_width="wrap_content"android:layout_height="300dp"android:layout_gravity="center"/><Spaceandroid:layout_width="match_parent"android:layout_height="30dp" /><Buttonandroid:id="@+id/take_photo"android:layout_width="192dp"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:text="打开相机" /><Spaceandroid:layout_width="match_parent"android:layout_height="10dp" /><Buttonandroid:id="@+id/choose_from_album"android:layout_width="192dp"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:text="打开相册" /></LinearLayout>

3.Java文件

package com.example.test11;import android.Manifest;import android.annotation.TargetApi;import android.app.Activity;import android.content.ContentUris;import android.content.Intent;import android.content.pm.PackageManager;import android.database.Cursor;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.media.Image;import .Uri;import android.os.Build;import android.provider.DocumentsContract;import android.provider.MediaStore;import android.support.annotation.NonNull;import android.support.v4.app.ActivityCompat;import android.support.v4.content.ContextCompat;import android.support.v4.content.FileProvider;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.ImageView;import android.widget.Toast;import java.io.File;import java.io.FileNotFoundException;import java.io.IOException;public class MainActivity extends AppCompatActivity {private final int TAKE_PHOTO = 1;private final int CHOOSE_PHOTO = 2;private ImageView picture;private Uri imageUri;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button takephoto = findViewById(R.id.take_photo);Button chooseFromAlbum = findViewById(R.id.choose_from_album);picture = findViewById(R.id.picture);takephoto.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//创建File对象,用于储存拍照后的图片File outputImage = new File(getExternalCacheDir(),"output_image.ipg");try {if(outputImage.exists()){outputImage.delete();}outputImage.createNewFile();} catch (IOException e) {e.printStackTrace();}if(Build.VERSION.SDK_INT>=24){imageUri = FileProvider.getUriForFile(MainActivity.this,"com.example.cameraalbumtest.fileprovider",outputImage);}else{imageUri = imageUri.fromFile(outputImage);}//启动相机程序Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);startActivityForResult(intent,TAKE_PHOTO);}});chooseFromAlbum.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);}else openAlbum();}});}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {switch(requestCode){case TAKE_PHOTO:if(resultCode == RESULT_OK){//将拍摄的照片显示出来try{Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));picture.setImageBitmap(bitmap);}catch (Exception e){e.printStackTrace();}}break;case CHOOSE_PHOTO:if(resultCode == RESULT_OK){//判断手机型号if (Build.VERSION.SDK_INT>=19){//4.4及以上系统使用这个方法处理图片handleImageOnKitKat(data);}else{//4.4以下系统使用这个方法处理图片handleImageBeforeKitKat(data);}}break;default:break;}}private void openAlbum(){Intent intent = new Intent("android.intent.action.GET_CONTENT");intent.setType("image/*");startActivityForResult(intent,CHOOSE_PHOTO);}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {switch (requestCode){case 1:if (grantResults.length>0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){openAlbum();}else{Toast.makeText(this,"You denied the permission",Toast.LENGTH_SHORT).show();}break;default:}}@TargetApi(19)private void handleImageOnKitKat(Intent data){String imagePath = null;Uri uri = data.getData();if (DocumentsContract.isDocumentUri(this,uri)){//如果是Document类型的Uri,则通过document id处理String docId = DocumentsContract.getDocumentId(uri);if ("com.android.providers.media.documents".equals(uri.getAuthority())){String id = DocumentsContract.getDocumentId(uri);String selection = MediaStore.Images.Media._ID+"="+id;imagePath = getImagePath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,selection);}else if("com.android.providers.downloads.documents".equals(uri.getAuthority())){Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://dowloads/public_downloads"),Long.valueOf(docId));imagePath = getImagePath(contentUri,null);}}else if("content".equalsIgnoreCase(uri.getScheme())){//如果是content类型的Uri,则使用普通方式处理imagePath = getImagePath(uri,null);}else if ("file".equalsIgnoreCase(uri.getScheme())){//如果是file类型的Uri,直接获取图片路径即可imagePath = uri.getPath();}displayImage(imagePath);//根据图片路径显示图片}private void handleImageBeforeKitKat(Intent data){Uri uri = data.getData();String imagePath = getImagePath(uri,null);displayImage(imagePath);}private String getImagePath(Uri uri,String selection){String path = null;//通过Uri和selection来获取真实的图片路径Cursor cursor = getContentResolver().query(uri,null,selection,null,null);if(cursor != null){if(cursor.moveToFirst()){path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));}cursor.close();}return path;}private void displayImage(String imagePath){if (imagePath != null){Bitmap bitmap = BitmapFactory.decodeFile(imagePath);picture.setImageBitmap(bitmap);}else{Toast.makeText(this,"failed to get image",Toast.LENGTH_SHORT).show();}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。