21

ギャラリーから画像を選択し、SDCard の他のフォルダーにコピーしたいと考えています。

ギャラリーから画像を選択するコード

Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
    photoPickerIntent.setType("image/*");
    startActivityForResult(photoPickerIntent, REQUEST_CODE_CHOOSE_PICTURE_FROM_GALLARY);

content://media/external/images/media/681この URI onActivityResultを取得します。

画像をコピーしたいのですが、

path ="content://media/external/images/media/681

path = "file:///mnt/sdcard/sharedresources/Androidのsdcardのこのパスへ。

これを行う方法?

4

5 に答える 5

13
OutputStream out;
            String root = Environment.getExternalStorageDirectory().getAbsolutePath()+"/";
            File createDir = new File(root+"Folder Name"+File.separator);
            if(!createDir.exists()) {
                createDir.mkdir();
            }
            File file = new File(root + "Folder Name" + File.separator +"Name of File");
            file.createNewFile();
            out = new FileOutputStream(file);                       

        out.write(data);
        out.close();

それがあなたを助けることを願っています

于 2011-12-29T06:16:29.940 に答える
5

1つの解決策は、

1) 選択したファイルの inputStream からバイトを読み取ります。

「content://media/external/images/media/681」という URI onActivityResult を取得します。取得したこの URI をクエリすることで、ファイル名を取得できます。それのinputStreamを取得します。byte[] に読み込みます。

どうぞ/

Uri u = Uri.Parse("content://media/external/images/media/681");

カーソル cursor = contentResolver.query(u, null, null, null, null); ファイル名を返す列名「_data」があり、ファイル名から入力ストリームを作成できます。

この入力ストリームを読み取ることができるようになりました

         byte data=new byte[fis.available()];
          fis.read(data);

したがって、画像バイトを含むデータ(バイト配列)があります

2) sdcard にファイルを作成し、ステップ 1 で取得した byte[] で書き込みます。

       File file=new File(fileOnSD.getAbsolutePath() +"your foldername", fileName);
        FileOutputStream fout=new FileOutputStream(file, false);
        fout.write(data);

query メソッドから既に持っている fileName として、ここで同じものを使用します。

于 2011-12-29T06:10:13.780 に答える
0

このリンクを読んでいました。ここでは、Java でファイルをコピーする 4 つの方法について話しているため、Android にも関連しています。

著者は、@Prashant の回答で使用されているように「チャネル」を使用することが最善の方法であると結論付けていますが、他の方法を検討することもできます。

(最初の2つを試しましたが、どちらも機能します)

于 2015-07-13T08:41:03.777 に答える
0

@AAnkitの回答に賛成票を投じましたが、借りていくつかの項目を変更しました。彼は使用について言及していますCursorが、適切な説明がないと、初心者にとって混乱を招く可能性があります.

これは、最も投票された回答よりも簡単だと思います。

String mCurrentPhotoPath = "";


private File createImageFile() throws IOException {
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    String imageFileName = "JPEG_" + timeStamp + "_";
    File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
    File image = File.createTempFile(
            imageFileName,  /* prefix */
            ".jpg",         /* suffix */
            storageDir      /* directory */
    );

    mCurrentPhotoPath = image.getAbsolutePath();
    return image;
}


                   /*Then I proceed to select from gallery and when its done selecting it calls back the onActivityResult where I do some magic*/


private void snapOrSelectPicture() {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
        File photoFile = null;
        try {
            photoFile = createImageFile();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        if (photoFile != null) {
            Uri photoURI = FileProvider.getUriForFile(this,
                    "com.example.android.fileprovider",
                    photoFile);
            takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
            startActivityForResult(Intent.createChooser(takePictureIntent, "SELECT FILE"), 1001);
        }
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {

        try {
            /*data.getDataString() contains your path="content://media/external/images/media/681 */

            Uri u = Uri.parse(data.getDataString());
            Cursor cursor = getContentResolver().query(u, null, null, null, null);
            cursor.moveToFirst();
            File doc = new File(cursor.getString(cursor.getColumnIndex("_data")));
            File dnote = new File(mCurrentPhotoPath);
            FileOutputStream fout = new FileOutputStream(dnote, false);
            fout.write(Files.toByteArray(doc));
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
于 2016-11-20T10:34:24.320 に答える