国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android打開(kāi)圖庫(kù)選擇照片功能代碼

2019-12-12 01:11:08
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

 我們首先來(lái)看下代碼:

//檢查權(quán)限 public void checkPermission() {  if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {   ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);   //發(fā)現(xiàn)沒(méi)有權(quán)限,調(diào)用requestPermissions方法向用戶申請(qǐng)權(quán)限,requestPermissions接收三個(gè)參數(shù),第一個(gè)是context,第二個(gè)是一個(gè)String數(shù)組,我們把要申請(qǐng)的權(quán)限   //名放在數(shù)組中即可,第三個(gè)是請(qǐng)求碼,只要是唯一值就行  } else {   openAlbum();//有權(quán)限就打開(kāi)相冊(cè)  } } public void openAlbum() {  //通過(guò)intent打開(kāi)相冊(cè),使用startactivityForResult方法啟動(dòng)actvity,會(huì)返回到onActivityResult方法,所以我們還得復(fù)寫(xiě)onActivityResult方法  Intent intent = new Intent("android.intent.action.GET_CONTENT");  intent.setType("image/*");  startActivityForResult(intent, CHOOSE_PHOTO); } //彈出窗口向用戶申請(qǐng)權(quán)限 @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {  super.onRequestPermissionsResult(requestCode, permissions, grantResults);//彈出授權(quán)的窗口,這條語(yǔ)句也可以刪除,沒(méi)有影響  //獲得了用戶的授權(quán)結(jié)果,保存在grantResults中,判斷grantResult中的結(jié)果來(lái)決定接下來(lái)的操作  switch (requestCode) {   case 1:    if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {     openAlbum();    } else {     Toast.makeText(this, "授權(quán)失敗,無(wú)法操作", Toast.LENGTH_SHORT).show();    }    break;   default:    break;  } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {  super.onActivityResult(requestCode, resultCode, data);  switch (requestCode) {   case CHOOSE_PHOTO:    if (resultCode == RESULT_OK) {     if (Build.VERSION.SDK_INT >= 19) {      handleImageOnkitKat(data);//高于4.4版本使用此方法處理圖片     } else {      handleImageBeforeKitKat(data);//低于4.4版本使用此方法處理圖片     }    }    break;   default:    break;  } } @TargetApi(19) private void handleImageOnkitKat(Intent data) {  String imagePath = null;  Uri uri = data.getData();  if (DocumentsContract.isDocumentUri(this, uri)) {   //如果是document類型的uri,則通過(guò)document id處理   String docId = DocumentsContract.getDocumentId(uri);   if ("com.android.providers.media.documents".equals(uri.getAuthority())) {    String id = docId.split(":")[1];//解析出數(shù)字格式的id    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://downloads/public_downloads"), Long.valueOf(docId));    imagePath = getImagePath(contentUri, null);   }  } else if ("content".equalsIgnoreCase(uri.getScheme())) {   imagePath = getImagePath(uri, null);  }  displayImage(imagePath); } private void handleImageBeforeKitKat(Intent data) {  Uri uri = data.getData();  String imagePath = getImagePath(uri, null);  displayImage(imagePath); } //獲得圖片路徑 public String getImagePath(Uri uri, String selection) {  String path = null;  Cursor cursor = getContentResolver().query(uri, null, selection, null, null); //內(nèi)容提供器  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 bitImage = BitmapFactory.decodeFile(imagePath);//格式化圖片   mImage.setImageBitmap(bitImage);//為imageView設(shè)置圖片  } else {   Toast.makeText(MainActivity.this, "獲取圖片失敗", Toast.LENGTH_SHORT).show();  } }

使用說(shuō)明:

一、在AndroidManiFest文件中添加存儲(chǔ)卡權(quán)限

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

二、通過(guò)findviewbyid找到Button或者是imageButton,并綁定監(jiān)聽(tīng)事件

三、復(fù)制上述的樣本代碼放在onClick事件下面,同時(shí),添加一個(gè)全局靜態(tài)變量

四、在button或者是imageButton的點(diǎn)擊事件調(diào)用checkPermission方法

五、通過(guò)findviewbyid找到ImageView,修改display方法中的調(diào)用設(shè)置圖片的對(duì)象名為實(shí)際項(xiàng)目中的imageView的對(duì)象名,詳情可以看代碼加紅的部分,將mImage修改即可

簡(jiǎn)單的邏輯介紹:

畫(huà)了一張流程圖,邏輯還是比較清晰的,這里就不做過(guò)多說(shuō)明

源碼分享:https://github.com/Stars-One/ChangePictureFromAlbum

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 桂林市| 兰坪| 乐清市| 比如县| 萨嘎县| 沁阳市| 朝阳市| 榆社县| 政和县| 岢岚县| 赤水市| 崇仁县| 临沧市| 浦东新区| 游戏| 若羌县| 吉木萨尔县| 张家港市| 建阳市| 沧州市| 奎屯市| 镇远县| 任丘市| 芮城县| 合作市| 来凤县| 西乌珠穆沁旗| 盐池县| 永顺县| 县级市| 剑川县| 石首市| 金乡县| 万全县| 钟祥市| 酒泉市| 盐亭县| 赞皇县| 土默特左旗| 虎林市| 班戈县|