1. 程式人生 > >通知Android系統相簿更新

通知Android系統相簿更新

網上查了有三種做法,這裡我只驗證了第一種做法,直接發一個廣播給系統,這裡要注意的是,那個檔案路徑一定是要相片的全路徑!

重要的事情說三遍:要相片的全路徑!要相片的全路徑!要相片的全路徑!我就是這個問題困擾我好一會

// 首先儲存圖片
    File appDir = new File(Environment.getExternalStorageDirectory(), "Boohee");
    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(); } // 其次把檔案插入到系統圖庫 ******************************A(新加的相片插入到系統相簿) try { MediaStore.Images.Media.insertImage(context.getContentResolver(), file.getAbsolutePath(), fileName, null); } catch (FileNotFoundException e) { e.printStackTrace
(); }
最後三選一***********************************************B(單獨使用會使得sd卡下的相片一一對應上)

方式一,傳送一個廣播,

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,Uri.parse("file://"+fileSD_file)));

方式二,通過MediaScannerConnection 類

 MediaScannerConnection.scanFile(context, new String[]{fileSD_file.toString()}, null, null);

 方式三,也是通過MediaScannerConnection 類

 MediaScannerConnection msc=new MediaScannerConnection(context,new MediaScannerConnectionClient(){

@Override
public void onMediaScannerConnected() {
// TODO Auto-generated method stub

}
@Override
public void onScanCompleted(String path, Uri uri) {
// TODO Auto-generated method stub

}
}); 
msc.connect();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
URL url = null;
try {
url = fileSD_file.toURL();
} catch (MalformedURLException e) {
e.printStackTrace();
}

MimeTypeMap mtm=MimeTypeMap.getSingleton();

msc.scanFile(fileSD_file.toString(), mtm.getMimeTypeFromExtension(mtm.getFileExtensionFromUrl(url.toString())));

//此句上面的一句可以,下面的一句也可以,都適合這種方法(已用顏色標示)。

// msc.scanFile(fileSD_file.getAbsolutePath(), null);

msc.disconnect();