通知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();

展开阅读全文

没有更多推荐了,返回首页