Android实现选择相册图片并显示功能

发布时间:2019-08-08 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Android实现选择相册图片并显示功能脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

本文实例为大家分享了AndROId实现选择相册图片并显示的具体代码,供大家参考,具体内容如下

需求描述: 选择手机相册中的一张图片,并通过ImageView展示出来
参考博文: android打开手机相册获取真正的图片路径

效果展示:

Android实现选择相册图片并显示功能

示例代码:

MainActivITy

 package com.example.www.mutilmedia;  import android.Manifest; import android.app.Activity; import android.content.Intent; import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Build; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatActivity; import android.util.LOG; import android.view.View; import android.widget.ImageView; import android.widget.Toast;  import java.util.Arrays;  public class MainActivity extends AppCompatActivity {    String[] mPErmissionList = new String[]{       Manifest.permission.WRITE_EXTERNAL_STORAGE,       Manifest.permission.READ_EXTERNAL_STORAGE};   public static final int REQUEST_PICK_IMAGE = 11101;   PRivate ImageView mShowimg;    @override   protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);      mShowImg = (ImageView) findViewById(R.id.imageView);    }    @Override   public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {     super.onRequestPermissionsResult(requestCode, permissions, grantResults);     switch (requestCode) {       case 100:         boolean writeExternalStorage = grantResults[0] == PackageManager.PERMISSION_GRANTED;         boolean readExternalStorage = grantResults[1] == PackageManager.PERMISSION_GRANTED;         Log.e("MainActivity", Arrays.toString(grantResults));         if (grantResults.length > 0 && writeExternalStorage && readExternalStorage) {           getImage();         } else {           Toast.makeText(this, "请设置必要权限", Toast.LENGTH_SHORT).show();         }          break;     }   }    private void getImage() {     if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {       startActivityForResult(new Intent(Intent.ACTION_GET_CONTENT).setType("image/*"),           REQUEST_PICK_IMAGE);     } else {       Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);       intent.addCategory(Intent.CATEGORY_OPENABLE);       intent.setType("image/*");       startActivityForResult(intent, REQUEST_PICK_IMAGE);     }   }    @Override   protected void onActivityResult(int requestCode, int resultCode, Intent data) {     super.onActivityResult(requestCode, resultCode, data);     if (resultCode == Activity.RESULT_OK) {       switch (requestCode) {         case REQUEST_PICK_IMAGE:           if (data != null) {             String realPathFromUri = RealPathFromUriUtils.getRealPathFromUri(this, data.getData());             Log.e("MainActivity", realPathFromUri);             showImg(realPathFromUri);           } else {             Toast.makeText(this, "图片损坏,请重新选择", Toast.LENGTH_SHORT).show();           }            break;       }     }   }     public void openCamera(View view) {     ActivityCompat.requestPermissions(MainActivity.this, mPermissionList, 100);   }     public void showImg(String path){     Bitmap bitmap = BitmapFactory.decodeFile(path);     mShowImg.setImageBitmap(bitmap);   }  }

RealPathFromUriUtils

 package com.example.www.mutilmedia;  import android.annotation.SupPressLint; import android.content.ContentUris; import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.os.Build; import android.provider.DocumentsContract; import android.provider.MediaStore;  public class RealPathFromUriUtils {   /**    * 根据Uri获取图片的绝对路径    *    * @param context 上下文对象    * @param uri   图片的Uri    * @return 如果Uri对应的图片存在, 那么返回该图片的绝对路径, 否则返回null    */   public static String getRealPathFromUri(Context context, Uri uri) {     int sdkVersion = Build.VERSION.SDK_INT;     if (sdkVersion >= 19) { // api >= 19       return getRealPathFromUriAboveApi19(context, uri);     } else { // api < 19       return getRealPathFromUriBelowAPI19(context, uri);     }   }    /**    * 适配api19以下(不包括api19),根据uri获取图片的绝对路径    *    * @param context 上下文对象    * @param uri   图片的Uri    * @return 如果Uri对应的图片存在, 那么返回该图片的绝对路径, 否则返回null    */   private static String getRealPathFromUriBelowAPI19(Context context, Uri uri) {     return getDataColumn(context, uri, null, null);   }    /**    * 适配api19及以上,根据uri获取图片的绝对路径    *    * @param context 上下文对象    * @param uri   图片的Uri    * @return 如果Uri对应的图片存在, 那么返回该图片的绝对路径, 否则返回null    */   @SuppressLint("NewApi")   private static String getRealPathFromUriAboveApi19(Context context, Uri uri) {     String filePath = null;     if (DocumentsContract.isDocumentUri(context, uri)) {       // 如果是document类型的 uri, 则通过document id来进行处理       String documentId = DocumentsContract.getDocumentId(uri);       if (isMediaDocument(uri)) { // MediaProvider         // 使用':'分割         String id = documentId.split(":")[1];          String selection = MediaStore.Images.Media._ID + "=&#63;";         String[] selectionargs = {id};         filePath = getDataColumn(context, MediaStore.Images.Media.EXTERNAL_CONTENT_URI, selection, selectionArgs);       } else if (isDownloadsDocument(uri)) { // DownloadsProvider         Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(documentId));         filePath = getDataColumn(context, contentUri, null, null);       }     } else if ("content".equalsIgnoreCase(uri.getScheme())) {       // 如果是 content 类型的 Uri       filePath = getDataColumn(context, uri, null, null);     } else if ("file".equals(uri.getScheme())) {       // 如果是 file 类型的 Uri,直接获取图片对应的路径       filePath = uri.getPath();     }     return filePath;   }    /**    * 获取数据库表中的 _data 列,即返回Uri对应的文件路径    *    * @return    */   private static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {     String path = null;      String[] projection = new String[]{MediaStore.Images.Media.DATA};     Cursor cursor = null;     try {       cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);       if (cursor != null && cursor.moveToFirst()) {         int columnIndex = cursor.getColumnIndexOrThrow(projection[0]);         path = cursor.getString(columnIndex);       }     } catch (Exception e) {       if (cursor != null) {         cursor.close();       }     }     return path;   }    /**    * @param uri the Uri to check    * @return Whether the Uri authority is MediaProvider    */   private static boolean isMediaDocument(Uri uri) {     return "com.android.providers.media.documents".equals(uri.getAuthority());   }    /**    * @param uri the Uri to check    * @return Whether the Uri authority is DownloadsProvider    */   private static boolean isDownloadsDocument(Uri uri) {     return "com.android.providers.downloads.documents".equals(uri.getAuthority());   } }

activity_main.XMl

 <?xML version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.COM/apk/res/android"   xmlns:app="http://schemas.android.com/apk/res-auto"   xmlns:tools="http://schemas.android.com/tools"   android:layout_width="match_parent"   android:layout_height="match_parent"   tools:context=".MainActivity">    <ImageView     android:id="@+id/imageView"     android:layout_width="0dp"     android:layout_height="0dp"     android:layout_marginStart="8dp"     android:layout_marginTop="8dp"     android:layout_marginEnd="8dp"     android:layout_marginBottom="8dp"     app:layout_constraintBottom_toBottomOf="parent"     app:layout_constraintEnd_toEndOf="parent"     app:layout_constraintStart_toStartOf="parent"     app:layout_constraintTop_toBottomOf="@+id/button3"     app:srcCompat="@android:color/white" />    <Button     android:id="@+id/button3"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_marginStart="8dp"     android:layout_marginTop="16dp"     android:layout_marginEnd="8dp"     android:onClick="openCamera"     android:text="camera"     app:layout_constraintEnd_toEndOf="parent"     app:layout_constraintHorizontal_bias="0.048"     app:layout_constraintStart_toStartOf="parent"     app:layout_constraintTop_toTopOf="parent" />  </android.support.constraint.ConstraintLayout>

AndroidManifest.xml

 <?xml version="1.0" encoding="utf-8"?> <;manifest xmlns:android="http://schemas.android.com/apk/res/android"   package="com.example.www.mutilmedia">    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <application     android:allowBackup="true"     android:icon="@mipmap/ic_launcher"     android:label="@string/app_name"     android:roundIcon="@mipmap/ic_launcher_round"     android:supportsRtl="true"     android:theme="@style/AppTheme">     <activity android:name=".MainActivity">       <intent-filter>         <action android:name="android.intent.action.MAIN" />          <category android:name="android.intent.category.LAUNCHER" />       </intent-filter>     </activity>   </application>  </manifest>
android教程
脚本网站
android studio

脚本宝典总结

以上是脚本宝典为你收集整理的Android实现选择相册图片并显示功能全部内容,希望文章能够帮你解决Android实现选择相册图片并显示功能所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。