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));

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

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

GitHub 加速计划 / ass / assets
184
19
下载
Ultralytics assets
最近提交(Master分支:2 个月前 )
969b5911 2 个月前
dcb30515 3 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐