日常搬磚,圖片存儲(chǔ)

每天都是快樂(lè)的搬磚生活。

最近搬磚過(guò)程中遇到了一個(gè)需求,需要往相冊(cè)里面存儲(chǔ)一張圖片,反正就是用戶打開微信,qq,微博啊,就是有圖片選擇器的那種應(yīng)用,你這張圖片都能找得到。嗯,開始嘍第一版。
思路就是網(wǎng)上 到處都是的添加到圖庫(kù)中:
public static String saveImageToGallery(Context context, Bitmap bmp) {
// 首先保存圖片
File appDir = new File(Environment.getExternalStorageDirectory(), "");
if (!appDir.exists()) {
appDir.mkdir();
}
String fileName = System.currentTimeMillis() + ".jpg";
File file = new File(appDir, fileName);
FileOutputStream fos = null;
try {
Bitmap bitmap = BitmapTools.scaleBitmap(bmp, 2f);
fos = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
bitmap.recycle();//這個(gè)地方可以回收資源嗎
} catch (Exception e) {
e.printStackTrace();
}finally {
if (fos!=null){
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

    // 其次把文件插入到系統(tǒng)圖庫(kù)
    try {
        MediaStore.Images.Media.insertImage(context.getContentResolver(),
                file.getPath(), fileName, null);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
        Log.e("傳入系統(tǒng)圖庫(kù)", "saveImageToGallery: "+e.getMessage() );
    }
    // 最后通知圖庫(kù)更新
    context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse(file.getPath())));
    return file.getPath();
}

TODO -------------------------end

然后蛋疼的是,我那張圖片是每次打開app 通過(guò)后臺(tái)數(shù)據(jù) 自己合成的,所以每次都要往 系統(tǒng)圖庫(kù)里面添加一次,問(wèn)題來(lái)了,系統(tǒng)圖庫(kù)可不管你的,他會(huì)生成一張縮略圖,而且圖庫(kù)里面縮略圖的名字是他自己命名的。然后在我搬完一天磚之后,準(zhǔn)備發(fā)朋友圈的時(shí)候,特喵的,全是我自己生成的圖片,我的表情包呢?

還是換一種思路,要不做成QQ,微信那種,讓系統(tǒng)圖庫(kù)掃描我的文件夾?,應(yīng)該可行、
public static String saveImageToGallery(Context context, Bitmap bmp,String name) {
// 首先保存圖片
String path=Environment.getExternalStorageDirectory()+"/video_images";
File appDir = new File(path, "");
if (!appDir.exists()) {
appDir.mkdir();
}
String fileName = name + ".jpg";
File file = new File(appDir, fileName);
FileOutputStream fos = null;
try {
Bitmap bitmap = BitmapTools.scaleBitmap(bmp, 2f);
fos = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
bitmap.recycle();//這個(gè)地方可以回收資源嗎
} catch (Exception e) {
e.printStackTrace();
}finally {
if (fos!=null){
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 最后通知圖庫(kù)更新4.4 以上寫法
MediaScanner mediaScanner = new MediaScanner(context);
String[] filePaths = new String[]{file.getPath()};
String[] mimeTypes = new String[]{MimeTypeMap.getSingleton().getMimeTypeFromExtension("png")};
mediaScanner.scanFiles(filePaths, mimeTypes);
//這個(gè)是4.4 以下的
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse(file.getPath())));
return file.getPath();
}

//這是上面用到的工具、
public class MediaScanner implements MediaScannerConnection.MediaScannerConnectionClient {
/**
* 掃描對(duì)象
*/
private MediaScannerConnection mediaScanConn = null;

public MediaScanner(Context context) {
    //實(shí)例化
    mediaScanConn = new MediaScannerConnection(context, this);
}

/**文件路徑集合**/
private String[] filePaths;
/**文件MimeType集合**/
private String[] mimeTypes;

/**
 * 掃描文件
 * @author YOLANDA
 * @param mimeTypes
 */
public void scanFiles(String[] filePaths, String[] mimeTypes) {
    this.filePaths = filePaths;
    this.mimeTypes = mimeTypes;
    mediaScanConn.connect();//連接掃描服務(wù)
}

/**
 * @author YOLANDA
 */
@Override
public void onMediaScannerConnected() {
    for (int i = 0; i < filePaths.length; i++) {
        mediaScanConn.scanFile(filePaths[i], mimeTypes[i]);//服務(wù)回調(diào)執(zhí)行掃描
    }
    filePaths = null;
    mimeTypes = null;
}

private int scanTimes = 0;

/**
 * 掃描一個(gè)文件完成
 * @author YOLANDA
 * @param path
 * @param uri
 */
@Override
public void onScanCompleted(String path, Uri uri) {
    scanTimes ++;
    if(scanTimes == filePaths.length) {//如果掃描完了全部文件
        mediaScanConn.disconnect();//斷開掃描服務(wù)
        scanTimes = 0;//復(fù)位計(jì)數(shù)
    }
}

}

注:上面的那個(gè)類是從網(wǎng)絡(luò)上找到的,由于時(shí)間有點(diǎn)長(zhǎng),我沒(méi)有找到該 類的作者,但是十分感謝。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 7,377評(píng)論 0 17
  • 在最近項(xiàng)目測(cè)試中,今天發(fā)現(xiàn)以前一直正常使用的分享圖片到微信朋友圈的功能突然用不了了,點(diǎn)擊分享到朋友圈時(shí),提示“獲取...
    初心不忘c(diǎn)閱讀 3,745評(píng)論 2 0
  • 一、緩存介紹: (一)、Android中緩存的必要性: 智能手機(jī)的緩存管理應(yīng)用非常的普遍和需要,是提高用戶體驗(yàn)的有...
    溫暖的外星閱讀 949評(píng)論 0 12
  • ¥開啟¥ 【使用jni實(shí)現(xiàn)Tost】 〖2017-08-20 22:15:04〗 《在xx.cpp中寫入以下代碼€...
    小菜c閱讀 928評(píng)論 0 1
  • 今天又是周末了,時(shí)間過(guò)的真快。期末考試進(jìn)入倒計(jì)時(shí),孩子們都在家復(fù)習(xí),我今天去上班。 今天店里來(lái)了一位顧客,是和老板...
    晨曦_e247閱讀 184評(píng)論 1 2

友情鏈接更多精彩內(nèi)容