程序从一个ダイアログ开始: プライベート無効ショー(){ 最後のダイアログダイアログ=新しいダイアログ(これ、R.style.ActionSheetDialogStyle)。 ビューインフレート= LayoutInflater.from(この).inflate(R.layout.dialog_item、NULL); //相册 ボタンbt_camera = inflate.findViewById(R.id.bt_camera)。 //取消 ボタンbt_cancel = inflate.findViewById(R.id.bt_cancel)。 dialog.setContentView(インフレート)。 ウィンドウダイアログウィンドウ= dialog.getWindow()。 dialogWindow.setGravity(Gravity.BOTTOM)。 WindowManager.LayoutParams LP = dialogWindow.getAttributes()。 lp.y = 20。 dialogWindow.setAttributes(LP); //取消按钮 bt_cancel.setOnClickListener(新しいView.OnClickListener(){ @Override 公共ボイドのonClick(ビュービュー){ dialog.dismiss(); } })。 //从相册选取 bt_camera.setOnClickListener(新View.OnClickListener(){ @Override ます。public void onClickの(ビュービュー){ dialog.dismiss(); 場合(ContextCompat.checkSelfPermission(FeedbackDetails.this、 android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){ ActivityCompat.requestPermissions(FeedbackDetails.this、新しいString [] {android.Manifest.permission.WRITE_EXTERNAL_STORAGE}、1); }他{ openAlbum()。 } } })。 dialog.show(); } プライベートボイドopenAlbum(){ 意図意図=新しいテント( "android.intent.action.GET_CONTENT")。 intent.setType( "画像/ *"); startActivityForResult(意図、CHOOSE_PHOTO); //打开相册 } //相册 @Override 公共ボイドonRequestPermissionsResult(int型requestCode、文字列[]権限、INT [] grantResults){ super.onRequestPermissionsResult(requestCode、パーミッション、grantResults)。 スイッチ(requestCode){ ケース1: (grantResults.length> 0の場合&& grantResults [0] == PackageManager.PERMISSION_GRANTED){ openAlbum()。 } そうしないと { Toast.makeText(これは、Toast.LENGTH_SHORTを"あなたが拒否したアルバムヨーヨーを開けないことが許可申請" ).SHOW(); } BREAK; デフォルト: } } @Overrideは onActivityResult(requestCode int型、int型のresultCode、テントデータ){無効に保護 スイッチ(requestCode){ :ケースCHOOSE_PHOTO IF(resultCodeが== RESULT_OK){ //分析電話システムバージョン番号 IF(Build.VERSION.SDK_INT> = 19){ // 4.4及び画像処理するためのこの方法を使用してシステム上 handleImageOnKitKat(データ); }他{ 列DOCID = DocumentsContract.getDocumentId(URI)。 //システム4.4画像処理方法 handleImageBeforeKitKat(データ)。 } } BREAK; デフォルト: BREAK; } } @TargetApi(19) プライベートボイドhandleImageOnKitKat(インテント・データ){ ストリングIMAGEPATH = NULL; ウリURI = data.getData(); IF(DocumentsContract.isDocumentUri(この、URI)){ / /ウリ、文書ID場合の処理により、文書タイプである 文字列ID = docId.split( ":")[1。 ]; // IDが解析され、デジタル形式の ストリング選択= MediaStore.Images.Media._ID + "=" + ID。 IF( "com.android.providers.media.documents" .equals(uri.getAuthority())){ IMAGEPATH = getImagePath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI、選択)。 }そうであれば( "com.android.providers.downloads.documents" .equals(URI。 getAuthority())){ ウリcontentUri = ContentUris.withAppendedId(Uri.parse( "コンテンツ:ダウンロード/ public_downloads")、Long.valueOf( DOCID)); IMAGEPATH = getImagePath(contentUri、NULL); } }そうであれば( "コンテンツ" .equalsIgnoreCase(uri.getScheme())){ //如果是コンテンツを类型的ウリ、则使用普通方式处理 IMAGEPATH = getImagePath(URI、NULL); }そうIFは、(「ファイル」.equalsIgnoreCase(uri.getScheme())){ //ファイルタイプがウリ、画像への直接アクセスパスである場合 IMAGEPATH = uri.getPath( ); } DisplayImage(IMAGEPATH); //画像経路表示画像 } プライベート空隙handleImageBeforeKitKat(インテント・データ){ ウリURI = data.getData(); 文字列= getImagePath IMAGEPATH(URI、NULL); DisplayImage(IMAGEPATH); } プライベート文字列getImagePath(URIウリ、文字列の選択){ 文字列のパスヌル=; // URIと選択により、実際の画像のパスを取得するには 、カーソル= getContentResolverカーソル()クエリ(URI、ヌル、選択、NULL、NULL);. (!カーソル= NULL){IF (cursor.moveToFirst()){IF パス= cursor.getString(cursor.getColumnIndex(メディアストア ; Images.Media.DATA)) //ビットマップ形式のPNGに変換します } cursor.close()。 } リターンパス。 } //获取图片地址 ます。private void displayImage(文字列IMAGEPATH){ 場合(!IMAGEPATH = NULL){ ビットマップビットマップ= BitmapFactory.decodeFile(IMAGEPATH)。 headFile = saveMyBitmap(ビットマップ、 "頭"); setsend( ""、headFile)。 }他{ Toast.makeText(この"获取图片失败"、Toast.LENGTH_SHORT).SHOW(); } } 公開ファイルsaveMyBitmap(ビットマップmBitmap、文字列の接頭辞){ ファイルstorageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)。 ファイルファイル= NULL; {試します ファイル= File.createTempFile( 接頭辞、/ *接頭辞* / ".JPG"、/ *サフィックス* / storageDir / *ディレクトリ* / ); FileOutputStream fosの=新しいのFileOutputStream(ファイル); mBitmap.compress(Bitmap.CompressFormat.JPEG、10、FOS)。 fos.flush(); )(fos.close。 }キャッチ(例外e){ e.printStackTrace(); } ファイルを返します。 }