Unity截屏保存到Android相册

  • Unity端截屏代码
  • Unity需要的Android Jar及Java代码(由于之前是找的一个Jar库因不支持鸿蒙所以自己动手二次开发的Java调用库)
    • Unity JAR库(支持Android系统)
  • Unity录屏代码
    • 如有兴趣,欢迎留言一起讨论

Unity端截屏代码

  string date = System.DateTime.Now.ToString("dd-MM-yy");string fileName="XXXXX";string screenshotFilename = fileName + "_"+ date + ".png";if (Application.platform == RuntimePlatform.Android){if (UnityCallAndroidByJavaManager.Intance.isHarmonyOs()){string androidPath = "/mnt/sdcard/DCIM/" + albumName + "/" + screenshotFilename;string path = Application.persistentDataPath + androidPath;string pathonly = Path.GetDirectoryName(path);if (!Directory.Exists(pathonly)){Directory.CreateDirectory(pathonly);}ScreenCapture.CaptureScreenshot(androidPath);yield return new WaitForSeconds(.5f);UnityCallAndroidByJavaManager.Intance.SaveImageOnlyHarmonyOs(path);}else{string androidPath = "/../../../../DCIM/" + albumName + "/" + screenshotFilename;string path = Application.persistentDataPath + androidPath;string pathonly = Path.GetDirectoryName(path);if (!Directory.Exists(pathonly)){Directory.CreateDirectory(pathonly);}ScreenCapture.CaptureScreenshot(androidPath);AndroidJavaClass obj = new AndroidJavaClass("com.ryanwebb.androidscreenshot.MainActivity");while (!photoSaved){photoSaved = obj.CallStatic<bool>("scanMedia", path);yield return new WaitForSeconds(.5f);}}

Unity需要的Android Jar及Java代码(由于之前是找的一个Jar库因不支持鸿蒙所以自己动手二次开发的Java调用库)

Unity JAR库(支持Android系统)

需要的Unity调用的Java库的下载链接

下面是部分Java库的代码展示

   /*** 是否为鸿蒙系统** @return true为鸿蒙系统*/public  boolean isHarmonyOs() {try {Class<?> buildExClass = Class.forName("com.huawei.system.BuildEx");Object osBrand = buildExClass.getMethod("getOsBrand").invoke(buildExClass);return "Harmony".equalsIgnoreCase(osBrand.toString());} catch (Throwable x) {return false;}}/*** 刷新指定文件*/public void ScenMediaFile(String MediaPath, Context context) {Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);File f = new File(MediaPath);Uri contentUri = Uri.fromFile(f);mediaScanIntent.setData(contentUri);context.sendBroadcast(mediaScanIntent);Toast.makeText(context, "已保存到相册", Toast.LENGTH_SHORT).show();}private void ScenMediaFileByUrl(Uri MediaPath, Context context) {Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,MediaPath);mediaScanIntent.setData(MediaPath);context.sendBroadcast(mediaScanIntent);Toast.makeText(context, "已保存到相册", Toast.LENGTH_SHORT).show();}/*** 刷新指定文件夹*/public void ScenMediaDir(String MediaPath, Context context) {final String ACTION_MEDIA_SCANNER_SCAN_DIR = "android.intent.action.MEDIA_SCANNER_SCAN_DIR";Intent mediaScanIntent = new Intent(ACTION_MEDIA_SCANNER_SCAN_DIR);File f = new File(MediaPath);Uri contentUri = Uri.fromFile(f);mediaScanIntent.setData(contentUri);context.sendBroadcast(mediaScanIntent);}/*** API 29及以下保存图片到相册的方法** @param toBitmap 要保存的图片*/private void saveImage(Context context, Bitmap toBitmap) {String insertImage = MediaStore.Images.Media.insertImage(context.getContentResolver(), toBitmap, toBitmap.toString(), "");if (!TextUtils.isEmpty(insertImage)) {Toast.makeText(context, insertImage, Toast.LENGTH_SHORT).show();File f = new File(insertImage);Uri contentUri = Uri.fromFile(f);ScenMediaFileByUrl(contentUri, context);}}/*** API29 中的最新保存图片到相册的方法*/private void saveImage29(Context context, Bitmap toBitmap) {Uri insertUri = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new ContentValues());try {OutputStream outputStream = context.getContentResolver().openOutputStream(insertUri, "rw");if (toBitmap.compress(Bitmap.CompressFormat.JPEG, 90, outputStream)) {Log.e("保存成功", "success");} else {Log.e("保存失败", "fail");}} catch (FileNotFoundException e) {e.printStackTrace();}ScenMediaFileByUrl(insertUri, context);}

Unity录屏代码

学习使用的NativeGallery录屏插件下载

#Unity调用Java库的代码

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Android;public class UnityCallAndroidByJavaManager : MonoBehaviour
{private AndroidJavaObject jo;private AndroidJavaClass act;private AndroidJavaObject actObj;public static UnityCallAndroidByJavaManager Intance;private void Awake(){Intance = this;}private void CheckInit(){jo = null;act = null;actObj = null;jo = new AndroidJavaObject("com.test.MainActivity");act = new AndroidJavaClass("com.unity3d.player.UnityPlayer");actObj = act.GetStatic<AndroidJavaObject>("currentActivity");}/// <summary>/// 是否是鸿蒙系统/// </summary>public bool isHarmonyOs(){CheckInit();var reslut = jo.Call<bool>("isHarmonyOs");return reslut;}/// <summary>/// 刷新指定文件到媒体库/// </summary>public void ScenMediaFile(string FilePath){CheckInit();jo.Call("ScenMediaFile", FilePath, actObj);}/// <summary>/// 保存图片至相册 只用于鸿蒙/// </summary>public void SaveImageOnlyHarmonyOs(string photoPath){Debug.Log(photoPath);CheckInit();jo.Call("SaveImageByOS",actObj, photoPath);}/// <summary>/// 保存视频至相册 只用于鸿蒙/// </summary>public void SaveVideoOnlyHarmonyOs(string VideoPath){CheckInit();jo.Call("saveVideoToLocal", VideoPath, actObj);}
}

如有兴趣,欢迎留言一起讨论

Unity 录屏截屏到Android相册,支持鸿蒙相关推荐

  1. 绿色抓屏截屏工具:FastStoneCapture

    FastStoneCapture下载 软件是绿色版本,下载后直接打开即可 链接:绿色抓屏截屏工具FastStoneCapture下载地址 提取码:ebxy FastStoneCapture安装 下载后 ...

  2. Android iOS防录屏截屏

    目录 Android防录屏和截屏 关于WindowManager.LayoutParams.FLAG_SECURE 关于Display.FLAG_SECURE iOS防录屏和截屏 监听截屏 录屏监听 ...

  3. 关于Unity中GrabPass截屏的使用和Shader的组织优化

    GrabPass截屏 可以用来截屏,截屏后把纹理传给下一个通道使用. 1:使用抓屏通道, GrabPass {} 或 GrabPass { " 纹理名称"}; 使用GrabPass ...

  4. java实现录屏_java录屏截屏: 用java代码实现的录屏和截图截屏,并在springboot上实现...

    由于习惯了springboot 所以就写在springboot上了,并暴露了一个接口来触发录屏功能 核心代码在fxbase包下的VideoRecorder类中 但是代码写的有点乱,使用者可以不必过度关 ...

  5. android 系统截屏原理,Android 系统副屏截屏功能

    收到一个客户需求,要求对双屏设备的副屏进行截图.查询资料后发现,系统截图有两种方法,一种是通过SurfaceControl.screenshot提供的接口调用,还有一种是通过screencap 命令获 ...

  6. Android App中监听系统截屏(截屏监听功能)

    功能需求: App内截屏监控功能,当发现用户在我们的app内进行了截屏操作时,进行对图片的二次操作,例如添加二维码,公司logo等一系列操作. 首先来app界面图及截屏监听图添加效果图 主要是利用内容 ...

  7. Android rom开发:最完整的截屏方案(支持全屏截屏+区域截屏)

    网上很多资料都是说使用View的getDrawingCache接口,这种方式有一个问题,无法截取到状态栏,因此个人不推荐. View view = getWindow().getDecorView() ...

  8. android截全屏方法,Android rom开发:最完整的截屏方案(支持全屏截屏+区域截屏)

    网上很多资料都是说使用View的getDrawingCache接口,这种方式有一个问题,无法截取到状态栏,因此个人不推荐. View view = getWindow().getDecorView() ...

  9. iOS学习—禁止截屏/截屏隐藏指定内容

    一.前言 手机截屏是手机系统操作,app是无法阻止这个操作的.为了防止app内容被截屏我们可以通过UITextfeild控件的secureTextEntry属性来实现截屏空白页面,其原理就是利用了开启 ...

最新文章

  1. 电路交换-报文交换-分组交换- 分组交换包括:虚电路和数据报
  2. mysql简单索引_mysql简单索引
  3. HTML !DOCTYPE 标签
  4. mysql用户权限管理和增删改查操作
  5. 聊聊Batch Normalization在网络结构中的位置
  6. 服务器维护以后只有辅助能进,通过服务器信息维护进行“半自动化”运维
  7. 成千上万的在线课程时,如何保持理智和学习编码
  8. codeblock socket 编译错误_在 Go 中使用 Websockets 和 Socket.IO
  9. Flutter修仙传第二章:路由详解
  10. 中考可以使用计算机吗,中考报志愿必须用电脑吗
  11. 83)PHP,配置文件功能
  12. 分享一个强大的弹出框
  13. C++ 打印机状态查询之SNMP协议
  14. 交易所交易规则和费用计算
  15. js 前端导出报错 格式不正确_vue项目前端导出word文件(bug解决)
  16. 哪些赛道适合程序员创业?
  17. Dad34 Java对象的内存形式
  18. mysql时间戳是什么意思_mysql中TIMESTAMP时间戳详解
  19. 岚图高管解读近50亿融资:东风跟投9亿 考虑后续IPO
  20. SAP BASIS经验书

热门文章

  1. nginx 配置网站页面变灰
  2. 关于flair中scoring card的使用
  3. 【c语言】【开门问题】【VS2022】
  4. 网络技术入门 :HTTP报文和TCP/IP数据包
  5. 微信公众号主页(页面模板)怎么添加
  6. java udp nio_Java NIO系列教程(十) Java NIO DatagramChannel
  7. 重复网页,网址已提交但未被选为规范网址—google
  8. Java 笔试:常见题目总结,html5在移动端开发优势更明显
  9. 我从腾讯那“偷了”3000万QQ用户数据,出了份很有趣的独家报告!
  10. 推荐一种便于记忆和大量管理的密码设计方式