Android:实现保存assets图片(或res下的图片:R.drawable.image)到手机相册

Posted ImCode0222

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android:实现保存assets图片(或res下的图片:R.drawable.image)到手机相册相关的知识,希望对你有一定的参考价值。

android:实现保存assets图片(或res下的图片:R.drawable.image)到手机相册

设备/引擎:Mac(11.6)/cocos

开发工具:Android studio(4.1.2)

开发语言:java

开发需求:保存图片到手机相册

注:本篇讲的是如何保存资源中的图片到手机相册并实时显示,与截屏保存到相册不同

1.获取资源并直接传递到bitmap:
1)assets中的资源:
如果你所需的资源较多,则建议将资源放到asstes中,方便集中使用,获取资源代码如下:

 AssetManager assetManager = MainActivity.getAssets();
 InputStream inputStream = assetManager.open(“image.png”);
 Bitmap bitmap = BitmapFactory.decodeStream(inputStream);

2)res中的资源: R.drawable.image
如果你所需资源不多,且资源文件已做obb打包处理(有关obb文件打包,可以翻看之前的文章),则可以将所需的资源放到res/drawable下,代码如下:

Bitmap bitmap = BitmapFactory.decodeResource(MainActivity.getResources(), R.drawable.image);

2.如果需要添加图片保存成功的提示,则需要加一个回调函数来完成提示操作,代码如下:

new Thread(new Runnable() 
 @Override
 public void run() 
     boolean isSaveeSuccess = saveImageToGallery(bitmap,MainActivity);
     if (isSaveeSuccess)
         Looper.prepare();
         Toast.makeText(joylandInstance,"保存成功.",Toast.LENGTH_LONG).show();
         Looper.loop();
     else
         Looper.prepare();
         Toast.makeText(joylandInstance,"保存失败.",Toast.LENGTH_LONG).show();
         Looper.loop();
     
   
).start();

3.获取手机相册路径,代码如下:

public <string> string getDCIM()
            if (!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()))
                return (string) "";
            

            String path = Environment.getExternalStorageDirectory().getPath() + "/dcim";
            if (new File(path).exists())
                return (string) path;
            

            path = Environment.getExternalStorageDirectory().getPath() + "/DCIM";
            File file = new File(path);
            if (!file.exists())
                if (!file.mkdir())
                    return (string) "";
                
            
            return (string) path;
        

此处目的是为了获取手机相册路径,代码直接复制即可。

4.保存图片到相册,代码如下:
这里设置为boolean,主要是需要返回图片保存结果成功与否,如果不需要的话,可以直接设置为void。

public boolean saveImageToGallery(Bitmap bitmap,Activity activity) 
            File appDir = new File((String) getDCIM());		//获取手机相册路径
            if (!appDir.exists())
                appDir.mkdir();
            
            //获取当前时间,标识不同时间保存的图片
            String fileName = System.currentTimeMillis() +".jpg";
            File file = new File(appDir,fileName);
            try 
                FileOutputStream fos = new FileOutputStream(file);
                boolean isSuccess = bitmap.compress(Bitmap.CompressFormat.JPEG,100,fos);
                fos.flush();
                fos.close();
                //通知图库更新,必须添加,否则相册无法更新新添加的图片
                Uri uri = Uri.fromFile(file);
                joylandInstance.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));
				//返回图片保存结果
                if (isSuccess) 
                    return true;
                 else 
                    return false;
                
             catch (FileNotFoundException e) 
                e.printStackTrace();
             catch (IOException e) 
                e.printStackTrace();
            
            return false;
        

5.将文件插入到系统图库,代码如下:

try     
MediaStore.Images.Media.insertImage(MainActivity.getContentResolver(),
                        file.getAbsolutePath(), fileName, null);
 catch (FileNotFoundException e) 
     e.printStackTrace();

6.通知图库更新,代码如下,4中已表明:

Uri uri = Uri.fromFile(file);
joylandInstance.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));

以上就是关于如何让用户通过点击将工程资源中图片保存到手机相册中的所有相关代码,用户操作部分需根据自身的代码来编写,这里不做详述。

希望能给大家带来帮助!!!有什么问题需要讨论的可以评论私信欢迎讨论~

以上是关于Android:实现保存assets图片(或res下的图片:R.drawable.image)到手机相册的主要内容,如果未能解决你的问题,请参考以下文章

14 资源管理 01

android add asset file

Android中项目中各个文件夹的含义和用途详解

Android中asset文件夹和raw文件夹

Android各种文件解析

android学习笔记32——资源