1、首先本人同样用了和大家一样的方法在百度查了很久的资料,之后又看API,官方帮助文档,之后终于解决了这个问题。在网上查到的都是代码几乎都是一个模子刻出来的,现在贴上我自己查了资料后改的代码。

2、直接上源码,简单粗暴

using UnityEngine;
using System.Collections;
using System;
using System.IO;
using UnityEngine.UI;/// <summary>
/// 截图保存安卓手机相册
/// </summary>
public class CaptureScreenshotMgr : MonoBehaviour
{public Text text;string _name = "";/// <summary>/// 保存截屏图片,并且刷新相册 Android/// </summary>/// <param name="name">若空就按照时间命名</param>public void CaptureScreenshot(){_name = "";_name = "Screenshot_" + GetCurTime() + ".png";#if UNITY_STANDALONE_WIN      //PC平台// 编辑器下// string path = Application.persistentDataPath + "/" + _name;       string path = Application.dataPath + "/" + _name;ScreenCapture.CaptureScreenshot(path, 0);Debug.Log("图片保存地址" + path);#elif UNITY_ANDROID     //安卓平台//Android版本StartCoroutine(CutImage(_name));//在手机上显示路径// text.text = "图片保存地址" + Application.persistentDataPath.Substring(0, Application.persistentDataPath.IndexOf("Android")) + "/DCIM/Camera/" + _name;text.text = "图片保存地址" + Application.persistentDataPath.Substring(0, Application.persistentDataPath.IndexOf("Android")) + "/截屏/" + _name;
#endif}//截屏并保存IEnumerator CutImage(string name){//图片大小  Texture2D tex = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, true);yield return new WaitForEndOfFrame();tex.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0, true);tex.Apply();yield return tex;byte[] byt = tex.EncodeToPNG();string path = Application.persistentDataPath.Substring(0, Application.persistentDataPath.IndexOf("Android"));//  File.WriteAllBytes(path + "/DCIM/Camera/" + name, byt);   //保存到  安卓手机的  DCIM/下的Camera   文件夹下File.WriteAllBytes(path + "/截屏/" + name, byt);         //保存到安卓手机的 文件管理下面的  《截屏》文件夹下      string[] paths = new string[1];paths[0] = path;ScanFile(paths);}//刷新图片,显示到相册中void ScanFile(string[] path){using (AndroidJavaClass PlayerActivity = new AndroidJavaClass("com.unity3d.player.UnityPlayer")){AndroidJavaObject playerActivity = PlayerActivity.GetStatic<AndroidJavaObject>("currentActivity");using (AndroidJavaObject Conn = new AndroidJavaObject("android.media.MediaScannerConnection", playerActivity, null)){Conn.CallStatic("scanFile", playerActivity, path, null, null);}}}/// <summary>/// 获取当前年月日时分秒,如20181001444/// </summary>/// <returns></returns>string GetCurTime(){return DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString()+ DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString();}}

3、创建 UI界面


4、之后还要在PlayerSetting中修改Write Permission中的模式为External(SDCard)

5、ok了 现在导出Apk 在手机上测试吧,截屏之后可以通过文件管理在文件夹中立刻看到,但如果想在相册中看到会有一段延迟。稍等一分钟就可以在相册中看到。

6、拿出我测试已久的 结果图

这个是手机的 文件管理 的 截屏 文件夹中

这个是手机相册中的截图,等了大概50秒才刷新出来

好了到现在困扰我几天的难题,今天终于解决了,想用的赶紧测试吧,今天国庆出去溜一圈,嘎嘎嘎····






2021.4.11修改

PlayerSetting中修改Write Permission中的模式为External(SDCard)

using UnityEngine;
using System.Collections;
using System;
using System.IO;/// <summary>
/// 截图保存安卓手机相册
/// </summary>
public class CaptureScreenshotMgr : MonoBehaviour
{//测试代码空格键截图private void Update(){if (Input.GetKeyDown(KeyCode.Space)){ScreenShootOnClick();}}//截图按钮点击事件public void ScreenShootOnClick(){StartCoroutine(ScreenShoot());}//图片保存路径public string ScreenshotPath(){string filePath = "";switch (Application.platform){case RuntimePlatform.WindowsEditor:case RuntimePlatform.OSXEditor:filePath = Application.dataPath + "/storage/emulated/0/Camera/";break;case RuntimePlatform.Android:filePath = "/storage/emulated/0/Camera/screenshot/";break;case RuntimePlatform.IPhonePlayer:filePath = Application.persistentDataPath + "/";break;}if (!Directory.Exists(filePath)){Directory.CreateDirectory(filePath);}return filePath;}//截图保存之后刷新相册IEnumerator ScreenShoot(){//图片大小  Texture2D tex = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, true);yield return new WaitForEndOfFrame();tex.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0, true);tex.Apply();yield return tex;byte[] byt = tex.EncodeToPNG();string fileName = DateTime.Now.ToString("yyyyMMddhhmmss") + ".jpg";string path = ScreenshotPath() + fileName;File.WriteAllBytes(path, byt);string[] paths = { path };ScanFile(paths);
#if UNITY_EDITORSystem.Diagnostics.Process.Start(path);
#endif}//刷新图片,显示到相册中void ScanFile(string[] path){using (AndroidJavaClass PlayerActivity = new AndroidJavaClass("com.unity3d.player.UnityPlayer")){AndroidJavaObject playerActivity = PlayerActivity.GetStatic<AndroidJavaObject>("currentActivity");using (AndroidJavaObject Conn = new AndroidJavaObject("android.media.MediaScannerConnection", playerActivity, null)){Conn.CallStatic("scanFile", playerActivity, path, null, null);}}}
}

微信公众号

Unity截屏保存到安卓手机相册相关推荐

  1. android禁止弹出保存此图片,安卓手机相册总是出现陌生图片?教你彻底清除!...

    原标题:安卓手机相册总是出现陌生图片?教你彻底清除! 各位小伙伴们在查看手机相册时,是否经常看见一些陌生图片呢?每次删除之后也还是会出现,这该如何解决?如果你也有这样的情况出现,可能是没有将手机中的这 ...

  2. iOS 生成带 logo 的二维码,区域截屏保存至相册(小功能二连发 (一))

    原文链接:http://www.jianshu.com/p/36e9f012ef39 生成带 logo 的二维码 区域截屏相关 -- 由3033分享 开篇 最近项目需要搞了几个相对独立的小功能,今天有 ...

  3. android5.1怎么截屏,一加5手机怎么截图 一加5截图方法【图文详解】

    一加5手机怎么截图 ?相信很多人还不懂,这里为大家介绍下 一加5截图方法 ,一起来看看. 方法一:快捷键截屏 一加5是一款安卓手机,而目前安卓手机通用的截图快捷键均为:「电源键」+「音量-键」,也就是 ...

  4. ADB投屏_如何高效投屏你的安卓手机屏幕?

    市面上能找到的众多投屏应用大多数附带水印.功能限制,但Scrcpy不一样! 想要把手机投屏到电脑? 想要进行高帧率的手机屏幕录制? 或者想要在电脑上实时控制你的安卓手机? Scrcpy! 它可以让你通 ...

  5. Unity 截屏小工具

    Unity截屏小工具 前言 ​ 在unity日常开发中,有时候美工会遇到将3D场景保存为2D图片的功能,用普通的截图工具截出来的图片不是特别理想,所以需要程序员提供一个简易的截屏小工具 实现思路 ​ ...

  6. 对相机所看的视角截屏保存为图片

    对相机所看的视角截屏保存为图片: 1 using UnityEngine; 2 using System.Collections; 3 using UnityEngine.UI; 4 /// < ...

  7. 别再用音量键截屏啦,华为手机的6种截屏方法你都会吗?很方便

    国产手机的日益强大,让许多果粉纷纷转向国产手机的阵营,这是因为国产手机在实用性方面越来越来强大了,就像简单的手机截屏功能,华为手机就有6种方式来完成,不管你想要长截图还是区域性截图,华为手机都可以满足 ...

  8. UNI-APP_保存视频到手机相册

    uni.downloadFile({url: '必填,附件网络地址',success: (res) => {const that = thisif (res.statusCode === 200 ...

  9. html手机截屏保存,手机屏幕截图无法保存该怎么解决?

    安卓4.0及以上系统有快捷截图功能,大多数安卓机是同时按住[电源键]和[音量下键]完成整个功能.笔者以前用这个功能非常便利,可最近快速截屏时一直提示:"无法保存屏幕截图存储设备可能正在使用& ...

最新文章

  1. Java+XML+MVC框架StrutsCX简介[转]
  2. SQL Server在更改计算机名后的设置
  3. arm926ej_EJB超时策略:它们如何提供帮助?
  4. 怎么wps解除合并单元格_wps表格怎么锁定单元格
  5. leetcode-189. Rotate Array
  6. 并查集一般高级应用的理解
  7. python中的struct模块
  8. 球球大作战c语言源代码,球球大作战,源码分享
  9. 用U盘制作EXSI启动盘
  10. HDUOJ-------1753大明A+B(大数之小数加法)
  11. 高效液相计算机审计追踪确认方案,药企GMP认证标准——审计追踪色谱工作站解决方案...
  12. 机考[51 - 60]
  13. ​​​​​​​NISP一级考试题库
  14. C++内存模型以及寄存器指针rsp和rbp
  15. 蓝牙学习之①:调戏小米手环
  16. Ie兼容js void不打开新页
  17. 【SQL Server】列转行 STUFF 函数
  18. minikube安装操作记录
  19. ie10+ js执行.click()下载文件无效
  20. word流程图擦除_word画流程图 Word中绘制流程图的正确姿势,这招大多数人不知道...

热门文章

  1. URLConnection(二)
  2. bilibiliAPI端口详解
  3. 经典论文阅读:FLP不可能性定理
  4. Java代码实现归并排序
  5. 页面中实现轮播图效果
  6. Sorl搭建与中文分词
  7. Go语言中的goroutine
  8. 一线运维 DBA 五年经验常用 SQL 大全
  9. 社交的本质究竟是什么?
  10. 815 LSA LDA文本模型的应用