很多时候我们的应用需要把图片保存到本地图库的指定文件夹中,但是保存了能在指定的路径看见,系统图库中却看不见,需要发送一个广播通知系统更新图库。
权限不要忘了加
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
public class MainActivity extends AppCompatActivity{
private ImageView image;
@Override
protected void onCreate (Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
image = (ImageView) findViewById(R.id.di);
//图片的长按事件
image.setOnLongClickListener(new View.OnLongClickListener(){
@Override
public boolean onLongClick (View v){
//dialogr提醒
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setItems(new String[]{"保存图片"}, new DialogInterface.OnClickListener(){
@Override
public void onClick (DialogInterface dialog, int which){
image.setDrawingCacheEnabled(true);
Bitmap imageBitmap = image.getDrawingCache();
if(imageBitmap != null){
saveImageToGallery(MainActivity.this, imageBitmap);
}
}
});
builder.show();
return true;
}
});
}
//指定保存路径
public static void saveImageToGallery (Context context, Bitmap bmp){
// 首先保存图片
File appDir = new File(Environment.getExternalStorageDirectory(), "ttys");
if(!appDir.exists()){
appDir.mkdir();
}
String fileName = System.currentTimeMillis() + ".jpg";
File file = new File(appDir, fileName);
try{
FileOutputStream fos = new FileOutputStream(file);
bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
fos.close();
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
// 其次把文件插入到系统图库
try{
MediaStore.Images.Media.insertImage(context.getContentResolver(), file.getAbsolutePath(), fileName, null);
}catch(FileNotFoundException e){
e.printStackTrace();
}
// 最后通知图库更新
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + path)));
Toast.makeText(context, "保存成功", Toast.LENGTH_SHORT).show();
}
}
public class MainActivity extends AppCompatActivity{
private ImageView image;
@Override
protected void onCreate (Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
image = (ImageView) findViewById(R.id.di);
//图片的长按事件
image.setOnLongClickListener(new View.OnLongClickListener(){
@Override
public boolean onLongClick (View v){
//dialogr提醒
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setItems(new String[]{"保存图片"}, new DialogInterface.OnClickListener(){
@Override
public void onClick (DialogInterface dialog, int which){
image.setDrawingCacheEnabled(true);
Bitmap imageBitmap = image.getDrawingCache();
if(imageBitmap != null){
saveImageToGallery(MainActivity.this, imageBitmap);
}
}
});
builder.show();
return true;
}
});
}
//指定保存路径
public static void saveImageToGallery (Context context, Bitmap bmp){
// 首先保存图片
File appDir = new File(Environment.getExternalStorageDirectory(), “ttys”);
if(!appDir.exists()){
appDir.mkdir();
}
String fileName = System.currentTimeMillis() + “.jpg”;
File file = new File(appDir, fileName);
try{
FileOutputStream fos = new FileOutputStream(file);
bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
fos.close();
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
// 其次把文件插入到系统图库
try{
MediaStore.Images.Media.insertImage(context.getContentResolver(), file.getAbsolutePath(), fileName, null);
}catch(FileNotFoundException e){
e.printStackTrace();
}
// 最后通知图库更新
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + path)));
Toast.makeText(context, "保存成功", Toast.LENGTH_SHORT).show();
}
}