アルバムから写真を撮ると、ファイルやアップロードの配列に変換

程序从一个ダイアログ开始:

プライベート無効ショー(){ 
        最後のダイアログダイアログ=新しいダイアログ(これ、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(); 
        } 
        ファイルを返します。
    }

  

おすすめ

転載: www.cnblogs.com/wang-jingyuan/p/12174068.html