国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android保存圖片到系統(tǒng)圖庫并通知系統(tǒng)相冊(cè)刷新

這篇具有很好參考價(jià)值的文章主要介紹了Android保存圖片到系統(tǒng)圖庫并通知系統(tǒng)相冊(cè)刷新。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1.場景

??在android開發(fā)中保存應(yīng)用的圖片并插入到系統(tǒng)圖庫同時(shí)通知相冊(cè)刷新的功能,做完后發(fā)現(xiàn)在部分手機(jī)上出現(xiàn)雖然圖片保存成功了,但是相冊(cè)卻找不到圖片的問題,查找文件夾圖片也已經(jīng)存在,可就是在相冊(cè)里刷新不出來。

2.思路

2.1.保存圖片的方法

public static File saveImage(Bitmap bmp) {
    File appDir = new File(Environment.getExternalStorageDirectory(), "zzs");
    if (!appDir.exists()) {
        appDir.mkdir();
    }
    String fileName = System.currentTimeMillis() + ".jpg";
    File file = new File(appDir, fileName);
    try {
        FileOutputStream fos = new FileOutputStream(file);
        bmp.compress(CompressFormat.JPEG, 100, fos);
        fos.flush();
        fos.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

??以上代碼便是將Bitmap保存圖片到指定的路徑/sdcard/Boohee/下,文件名以當(dāng)前系統(tǒng)時(shí)間命名,但是這種方法保存的圖片沒有加入到系統(tǒng)圖庫中

2.2.調(diào)用系統(tǒng)提供的插入圖庫的方法

MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, "title", "description");

??調(diào)用以上系統(tǒng)自帶的方法會(huì)把bitmap對(duì)象保存到系統(tǒng)圖庫中,但是這種方法無法指定保存的路徑和名稱,上述方法的title、description參數(shù)只是插入數(shù)據(jù)庫中的字段,真實(shí)的圖片名稱系統(tǒng)會(huì)自動(dòng)分配??此粕鲜鲞@種方法就是我們要用到的方法,但是可惜的調(diào)用上述放法插入圖庫的方法圖片并沒有立刻顯示在圖庫中,而我們需要立刻更新系統(tǒng)圖庫以便讓用戶可以立刻查看到這張圖片。

2.3.調(diào)用系統(tǒng)提供的插入圖庫的方法

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));

??上面那條廣播是掃描整個(gè)sd卡的廣播,如果你sd卡里面東西很多會(huì)掃描很久,在掃描當(dāng)中我們是不能訪問sd卡,所以這樣子用戶體現(xiàn)很不好,所以下面我們還有如下的方法:

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File("/sdcard/Boohee/image.jpg"))););

??或者還有如下方法:

final MediaScannerConnection msc = new MediaScannerConnection(mContext, new MediaScannerConnectionClient() {     
    public void onMediaScannerConnected() {     
        msc.scanFile("/sdcard/Boohee/image.jpg", "image/jpeg");     
    }     
    public void onScanCompleted(String path, Uri uri) {     
        Log.v(TAG, "scan completed");     
        msc.disconnect();     
    }     
});

上面代碼的圖片路徑不管是通過自己寫方法還是系統(tǒng)插入圖庫的方法都可以很容易的獲取到。

2.4.終極完美解決方案

??如果我想把圖片保存到指定的文件夾,同時(shí)又需要圖片出現(xiàn)在圖庫里呢?sdk還提供了這樣一個(gè)方法:

MediaStore.Images.Media.insertImage(getContentResolver(), "image path", "title", "description");

??上述方法的第二個(gè)參數(shù)是image path,這樣的話就有思路了,首先自己寫方法把圖片指定到指定的文件夾,然后調(diào)用上述方法把剛保存的圖片路徑傳入進(jìn)去,最后通知圖庫更新。

3.解決辦法

(1)創(chuàng)建文件路徑可選擇Environment.getExternalStorageDirectory(),也就是(/storage/emulated/0/com.xx.xxx.xxx/),之前有問題的版本使用的是context.getExternalFilesDir(null)也就是(/storage/sdcard/Android/data/com.xxx.xxx/),部分手機(jī)相冊(cè)無法找到此路徑或者沒有權(quán)限

    // 首先保存圖片
        File appDir;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
            //android11以后
            appDir = getExternalFilesDir(null);
        }else {
            appDir = new File(Environment.getExternalStorageDirectory(), "zzs");  
        }
        if (!appDir.exists()) {
            appDir.mkdir();
        }
        String fileName = System.currentTimeMillis() + ".jpg";
        File file = new File(appDir, fileName);
        try {
            FileOutputStream fos = new FileOutputStream(file);
            bmp.compress(CompressFormat.JPEG, 100, fos);
            fos.flush();
            fos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

(2)保存的方法添加寫入的動(dòng)態(tài)權(quán)限,把文件插入到系統(tǒng)圖庫

      //把文件插入到系統(tǒng)圖庫
        try {
            MediaStore.Images.Media.insertImage(this.getContentResolver(),
                    file.getAbsolutePath(), fileName, null);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

(3) 通知圖庫更新,使用MediaStore插入到系統(tǒng)相冊(cè),使用廣播Intent.ACTION_MEDIA_SCANNER_SCAN_FILE通知相冊(cè)刷新文章來源地址http://www.zghlxwxcb.cn/news/detail-821864.html

       // 通知圖庫更新
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            String path = file.getAbsolutePath();
            Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
            Uri uri = Uri.fromFile(new File(path));
            intent.setData(uri);
            sendBroadcast(intent);
        } else {
            String relationDir = file.getParent();
            File file1 = new File(relationDir);
            sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
                    Uri.fromFile(file1.getAbsoluteFile())));
        }

完整代碼

 public void saveImageToGallery(Context context, Bitmap bmp) {
        // 首先保存圖片
        File appDir;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
            //android11以后
            appDir = getExternalFilesDir(null);
        }else {
            appDir = new File(Environment.getExternalStorageDirectory(), "zzs");  
        }
        if (!appDir.exists()) {
            appDir.mkdir();
        }
        String fileName = System.currentTimeMillis() + ".jpg";
        File file = new File(appDir, fileName);
        try {
            FileOutputStream fos = new FileOutputStream(file);
            bmp.compress(CompressFormat.JPEG, 100, fos);
            fos.flush();
            fos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        //把文件插入到系統(tǒng)圖庫
        try {
            MediaStore.Images.Media.insertImage(this.getContentResolver(),
                    file.getAbsolutePath(), fileName, null);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        // 通知圖庫更新
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            String path = file.getAbsolutePath();
            Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
            Uri uri = Uri.fromFile(new File(path));
            intent.setData(uri);
            sendBroadcast(intent);
        } else {
            String relationDir = file.getParent();
            File file1 = new File(relationDir);
            sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
                    Uri.fromFile(file1.getAbsoluteFile())));
        }
    }

到了這里,關(guān)于Android保存圖片到系統(tǒng)圖庫并通知系統(tǒng)相冊(cè)刷新的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Android實(shí)現(xiàn)保存res下(drawable/mipmap)的圖片到手機(jī)相冊(cè)

    項(xiàng)目小需求需要保存二維碼名片到手機(jī)相冊(cè)的需求,該圖片在res/mipmap或者res/drawable文件夾下,實(shí)現(xiàn)方法如下。 代碼如下(示例): 代碼如下(示例): 以上就是今天要講的內(nèi)容,本文僅僅簡單介紹了在res/mipmap或者res/drawable文件夾下圖片保存到手機(jī)相冊(cè)的方法。

    2024年02月12日
    瀏覽(24)
  • 【Flutter】支持多平臺(tái) 多端保存圖片到本地相冊(cè) (兼容 Web端 移動(dòng)端 android 保存到本地)

    免責(zé)聲明: 我只測(cè)試了Web端 和 Android端 可行哈

    2024年02月09日
    瀏覽(101)
  • uniapp 微信小程序保存圖片到系統(tǒng)相冊(cè)(包括獲取手機(jī)相冊(cè)權(quán)限)即拿即用

    uniapp 微信小程序保存圖片到系統(tǒng)相冊(cè)(包括獲取手機(jī)相冊(cè)權(quán)限)即拿即用

    1. 代碼,即拿即用 2. 介紹使用到的方法 1. uni.getSetting uniapp官網(wǎng)鏈接: https://uniapp.dcloud.io/api/other/setting.html#getsetting 2. uni.authorize 鏈接:https://uniapp.dcloud.io/api/other/authorize.html#authorize 3. uni.saveImageToPhotosAlbum 鏈接: https://uniapp.dcloud.io/api/media/image.html#saveimagetophotosalbum 4. uni.openSe

    2024年02月11日
    瀏覽(32)
  • 微信小程序保存圖片到相冊(cè) 微信小程序?qū)崿F(xiàn)將圖片保存到手機(jī)相冊(cè)(方案一)

    目錄 微信小程序?qū)崿F(xiàn)將圖片保存到手機(jī)相冊(cè)(方案一) 微信小程序?qū)崿F(xiàn)將圖片保存到手機(jī)相冊(cè)(方案二) 微信小程序之點(diǎn)擊復(fù)制文本到剪貼板 微信小程序---判斷是IOS還是安卓 微信小程序分享圖片給微信好友 首先我們需要調(diào)用wx.downloadFile方法下載文件資源到本地,然后利用

    2023年04月20日
    瀏覽(21)
  • 微信小程序保存圖片到相冊(cè) 微信小程序?qū)崿F(xiàn)將圖片保存到手機(jī)相冊(cè)(方案一)

    目錄 微信小程序?qū)崿F(xiàn)將圖片保存到手機(jī)相冊(cè)(方案一) 微信小程序?qū)崿F(xiàn)將圖片保存到手機(jī)相冊(cè)(方案二) 微信小程序之點(diǎn)擊復(fù)制文本到剪貼板 微信小程序---判斷是IOS還是安卓 微信小程序分享圖片給微信好友 首先我們需要調(diào)用wx.downloadFile方法下載文件資源到本地,然后利用

    2023年04月20日
    瀏覽(25)
  • Android打開系統(tǒng)相機(jī)或從相冊(cè)中選擇圖片并顯示

    Android打開系統(tǒng)相機(jī)或從相冊(cè)中選擇圖片并顯示

    xml代碼 展示 ?java代碼 實(shí)機(jī)演示 ?

    2024年02月11日
    瀏覽(18)
  • 小程序或者Uniapp保存圖片異常 - Ios系統(tǒng)

    發(fā)現(xiàn)部分圖片通過? saveImageToPhotosAlbum? 接口無法保存,報(bào)錯(cuò)信息如下 saveImageToPhotosAlbum:fail [Gallery:-1]未能完成操作。(PHPhotosErrorDomain錯(cuò)誤-1。) 因?yàn)槎际蔷W(wǎng)絡(luò)圖片, 前置需要通過? downloadFile? 接口下載,拿到臨時(shí)路徑,通過臨時(shí)路徑進(jìn)行保存,發(fā)現(xiàn)報(bào)上述錯(cuò)誤的圖片在下載時(shí)也

    2024年02月15日
    瀏覽(19)
  • [小程序?qū)崿F(xiàn)保存圖片到相冊(cè)]

    實(shí)現(xiàn)邏輯: 首先查看用戶申請(qǐng)過的權(quán)限中是否有”保存圖片到相冊(cè)“,如果沒有這個(gè)權(quán)限,則需要先申請(qǐng)權(quán)限(彈窗授權(quán)),如果用戶同意授權(quán)則保存圖片,如果用戶不同意,則跳轉(zhuǎn)到設(shè)置頁,重新授權(quán),然后再保存圖片。 查看用戶申請(qǐng)的全縣有哪些 通過微信的API 獲取用戶

    2024年02月16日
    瀏覽(19)
  • uniapp-小程序保存圖片到相冊(cè)

    uniapp-小程序保存圖片到相冊(cè)

    一. 將圖片保存到手機(jī)相冊(cè)涉及的 api 有以下幾個(gè) 1. uni.getSetting (獲取用戶的當(dāng)前設(shè)置) 2. uni.authorize (提前向用戶發(fā)起授權(quán)請(qǐng)求。調(diào)用后會(huì)立刻彈窗詢問用戶是否同意授權(quán)小程序使用某項(xiàng)功能或獲取用戶的某些數(shù)據(jù),但不會(huì)實(shí)際調(diào)用對(duì)應(yīng)接口。如果用戶之前已經(jīng)同意授權(quán),則不

    2024年04月22日
    瀏覽(26)
  • flutter開發(fā)實(shí)戰(zhàn)-圖片保存到相冊(cè)

    flutter開發(fā)實(shí)戰(zhàn)-圖片保存到相冊(cè)。保存相冊(cè)使用的是image_gallery_saver插件 在pubspec.yaml中引入插件 使用image_gallery_saver將圖片保存到相冊(cè) flutter開發(fā)實(shí)戰(zhàn)-圖片保存到相冊(cè)。保存相冊(cè)使用的是image_gallery_saver插件。 學(xué)習(xí)記錄,每天不停進(jìn)步。

    2024年02月15日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包