第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將文件保存到 Android Q(API 29)上的公共(外部)存儲?

如何將文件保存到 Android Q(API 29)上的公共(外部)存儲?

墨色風(fēng)雨 2023-06-04 11:04:59
我一直在使用外部存儲來保存不同類型的文件。該文件需要對用戶可見?,F(xiàn)在從 Android Q 開始,該方法getExternalStoragePublicDirectory()已被棄用getExternalStoragePublicDirectory(docs)。我使用了以下代碼:File?externalFilesDir?=?new?File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),?"DirectoryName");還有另一種方法可以保存用戶可見的文件嗎?
查看完整描述

4 回答

?
函數(shù)式編程

TA貢獻(xiàn)1807條經(jīng)驗 獲得超9個贊

您需要為 Android Q 添加檢查。假設(shè)您要將圖像保存在公共下載文件夾中。


try{

     OutputStream fos;

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {

       ContentResolver resolver = context.getContentResolver();

       ContentValues contentValues = new ContentValues();

       contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, fileName);

       contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/jpg");

       contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS);

       Uri imageUri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);

       fos = resolver.openOutputStream(Objects.requireNonNull(imageUri));

    } else {

       String imagesDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString();

       File image = new File(imagesDir, fileName);

       fos = new FileOutputStream(image);

    }

     finalBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);

     Objects.requireNonNull(fos).close();

}catch (IOException e) {

  // Log Message

}


查看完整回答
反對 回復(fù) 2023-06-04
?
POPMUISE

TA貢獻(xiàn)1765條經(jīng)驗 獲得超5個贊

在android Q及以下verison中保存捕獲位圖


private class AsyncTaskExample extends AsyncTask<String, String, Bitmap> {

        Bitmap icon = null;

        ByteArrayOutputStream bytes;


    @Override

    protected void onPreExecute() {

        super.onPreExecute();

        mBitmap = BaseApplication.getInstance().getBitmap();

        ((BaseActivity)mContext).showFullScreenProgressLoader(((BaseActivity)mContext), ((BaseActivity)mContext).getString(R.string.please_wait), ((BaseActivity)mContext).getString(R.string.we_are_processing_your_request));

    }


    @Override

    protected Bitmap doInBackground(String... strings) {

        try {




      String imageFileName = "picture_" + System.currentTimeMillis() + ".jpg";

                File directory = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/" + Constants.INTERNAL_FOLDER_NAME + "/");

                directory.mkdirs();

                mFile = new File(directory, imageFileName);

                if (!mFile.isFile()) {

                    try {

                        mFile.createNewFile();

                    } catch (IOException e) {

                        e.printStackTrace();

                    }

                }

                if (Build.VERSION.SDK_INT == Build.VERSION_CODES.Q) {

                    final ContentResolver resolver = ((CameraFaceDetectionActivity) mContext).getContentResolver();

                    insertImage(resolver, mBitmap, mFile.getAbsolutePath(), "");

                } else {

                    FileOutputStream out = new FileOutputStream(mFile);

                    try {

//                    mBitmap = modifyOrientation(mBitmap,mFile.getAbsolutePath());

                        OutputStream output = new FileOutputStream(mFile);

                        mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, output);

                        output.flush(); // Not really required

                        output.close();

                    }

                catch (IOException e) {

                    e.printStackTrace();

                }

            }





        } catch(Exception e){

            e.printStackTrace();

        }

        return mBitmap;

    }


    @Override

    protected void onPostExecute(Bitmap bitmap) {

        super.onPostExecute(bitmap);


        final Handler handler = new Handler();

        handler.postDelayed(new Runnable() {

            @Override

            public void run() {

                try {

                    OutputStream output = new FileOutputStream(mFile);

                    Bitmap b = modifyOrientation(mBitmap, mFile.getAbsolutePath());

                    b.compress(Bitmap.CompressFormat.JPEG, 100, output);



                } catch (IOException e) {

                    e.printStackTrace();

                }


                startActivity(new Intent(mContext, SelfiePreviewForgetPsdActivity.class)

                        .putExtra(Constants.KEY_MOBILE, mMobileNumber)

                        .putExtra(Constants.KEY_COUNTRY_CODE, mCountryCode)

                        .putExtra(KEY_ID_NUMBER, idNumber)

                        .putExtra(Constants.KEY_USER_DETAIL, mVerifyUserDetailResponse)

                        .putExtra(KEY_ID_TYPE, idType)

                        .putExtra(Constants.IMAGE_PATH, mFile.getAbsolutePath()));

            }

        }, 500);

    }

}

下面是在android Q上保存位圖指定文件夾的方法


public static String insertImage(ContentResolver cr,

                                 Bitmap source,

                                 String title,

                                 String description) {


    ContentValues values = new ContentValues();

    values.put(MediaStore.Images.Media.TITLE, title);

    values.put(MediaStore.Images.Media.DISPLAY_NAME, title);

    values.put(MediaStore.Images.Media.DESCRIPTION, description);

    values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpg");

    // Add the date meta data to ensure the image is added at the front of the gallery

    values.put(MediaStore.Images.Media.DATE_ADDED, System.currentTimeMillis());

    values.put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis());


    Uri url = null;

    String stringUrl = null;    /* value to be returned */


    try {

        url = cr.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);


        if (source != null) {

            OutputStream imageOut = cr.openOutputStream(url);

            try {

                source.compress(Bitmap.CompressFormat.JPEG, 100, imageOut);

            } finally {

                imageOut.close();

            }


            long id = ContentUris.parseId(url);

            // Wait until MINI_KIND thumbnail is generated.

            Bitmap miniThumb = MediaStore.Images.Thumbnails.getThumbnail(cr, id, MediaStore.Images.Thumbnails.MINI_KIND, null);

            // This is for backward compatibility.

            storeThumbnail(cr, miniThumb, id, source.getWidth(), source.getHeight(), MediaStore.Images.Thumbnails.MICRO_KIND);

        } else {

            cr.delete(url, null, null);

            url = null;

        }

    } catch (Exception e) {

        if (url != null) {

            cr.delete(url, null, null);

            url = null;

        }

    }


    if (url != null) {

        stringUrl = url.toString();

    }


    return stringUrl;

}

保存位圖方法


 private static final Bitmap storeThumbnail(

        ContentResolver cr,

        Bitmap source,

        long id,

        float width,

        float height,

        int kind) {


    // create the matrix to scale it

    Matrix matrix = new Matrix();


    float scaleX = width / source.getWidth();

    float scaleY = height / source.getHeight();


    matrix.setScale(scaleX, scaleY);


    Bitmap thumb = Bitmap.createBitmap(source, 0, 0,

            source.getWidth(),

            source.getHeight(), matrix,

            true

    );


    ContentValues values = new ContentValues(4);

    values.put(MediaStore.Images.Thumbnails.KIND, kind);

    values.put(MediaStore.Images.Thumbnails.IMAGE_ID, (int) id);

    values.put(MediaStore.Images.Thumbnails.HEIGHT, thumb.getHeight());

    values.put(MediaStore.Images.Thumbnails.WIDTH, thumb.getWidth());


    Uri url = cr.insert(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, values);


    try {

        OutputStream thumbOut = cr.openOutputStream(url);

        thumb.compress(Bitmap.CompressFormat.JPEG, 100, thumbOut);

        thumbOut.close();

        return thumb;

    } catch (Exception ex) {

        return null;

    }

}


查看完整回答
反對 回復(fù) 2023-06-04
?
白板的微信

TA貢獻(xiàn)1883條經(jīng)驗 獲得超3個贊

File newDir = new File (Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "folder_name");

    if (!newDir.exists()) {

        newDir.mkdirs();

       }

    

File file = new File(newDir, imagename);

   try {

      FileOutputStream out = new FileOutputStream(file);

      bmpOverlay.compress(Bitmap.CompressFormat.PNG, 100, out);

      out.flush();

      out.close();

} catch (Exception e) {

     Log.e("interior", "Save image to SD");

}


查看完整回答
反對 回復(fù) 2023-06-04
?
浮云間

TA貢獻(xiàn)1829條經(jīng)驗 獲得超4個贊

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)

替換為:

   requireContext().getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS)!!.absolutePath



查看完整回答
反對 回復(fù) 2023-06-04
  • 4 回答
  • 0 關(guān)注
  • 249 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號