Unity 录屏截屏到Android相册,支持鸿蒙
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相册,支持鸿蒙相关推荐
- 绿色抓屏截屏工具:FastStoneCapture
FastStoneCapture下载 软件是绿色版本,下载后直接打开即可 链接:绿色抓屏截屏工具FastStoneCapture下载地址 提取码:ebxy FastStoneCapture安装 下载后 ...
- Android iOS防录屏截屏
目录 Android防录屏和截屏 关于WindowManager.LayoutParams.FLAG_SECURE 关于Display.FLAG_SECURE iOS防录屏和截屏 监听截屏 录屏监听 ...
- 关于Unity中GrabPass截屏的使用和Shader的组织优化
GrabPass截屏 可以用来截屏,截屏后把纹理传给下一个通道使用. 1:使用抓屏通道, GrabPass {} 或 GrabPass { " 纹理名称"}; 使用GrabPass ...
- java实现录屏_java录屏截屏: 用java代码实现的录屏和截图截屏,并在springboot上实现...
由于习惯了springboot 所以就写在springboot上了,并暴露了一个接口来触发录屏功能 核心代码在fxbase包下的VideoRecorder类中 但是代码写的有点乱,使用者可以不必过度关 ...
- android 系统截屏原理,Android 系统副屏截屏功能
收到一个客户需求,要求对双屏设备的副屏进行截图.查询资料后发现,系统截图有两种方法,一种是通过SurfaceControl.screenshot提供的接口调用,还有一种是通过screencap 命令获 ...
- Android App中监听系统截屏(截屏监听功能)
功能需求: App内截屏监控功能,当发现用户在我们的app内进行了截屏操作时,进行对图片的二次操作,例如添加二维码,公司logo等一系列操作. 首先来app界面图及截屏监听图添加效果图 主要是利用内容 ...
- Android rom开发:最完整的截屏方案(支持全屏截屏+区域截屏)
网上很多资料都是说使用View的getDrawingCache接口,这种方式有一个问题,无法截取到状态栏,因此个人不推荐. View view = getWindow().getDecorView() ...
- android截全屏方法,Android rom开发:最完整的截屏方案(支持全屏截屏+区域截屏)
网上很多资料都是说使用View的getDrawingCache接口,这种方式有一个问题,无法截取到状态栏,因此个人不推荐. View view = getWindow().getDecorView() ...
- iOS学习—禁止截屏/截屏隐藏指定内容
一.前言 手机截屏是手机系统操作,app是无法阻止这个操作的.为了防止app内容被截屏我们可以通过UITextfeild控件的secureTextEntry属性来实现截屏空白页面,其原理就是利用了开启 ...
最新文章
- 电路交换-报文交换-分组交换- 分组交换包括:虚电路和数据报
- mysql简单索引_mysql简单索引
- HTML !DOCTYPE 标签
- mysql用户权限管理和增删改查操作
- 聊聊Batch Normalization在网络结构中的位置
- 服务器维护以后只有辅助能进,通过服务器信息维护进行“半自动化”运维
- 成千上万的在线课程时,如何保持理智和学习编码
- codeblock socket 编译错误_在 Go 中使用 Websockets 和 Socket.IO
- Flutter修仙传第二章:路由详解
- 中考可以使用计算机吗,中考报志愿必须用电脑吗
- 83)PHP,配置文件功能
- 分享一个强大的弹出框
- C++ 打印机状态查询之SNMP协议
- 交易所交易规则和费用计算
- js 前端导出报错 格式不正确_vue项目前端导出word文件(bug解决)
- 哪些赛道适合程序员创业?
- Dad34 Java对象的内存形式
- mysql时间戳是什么意思_mysql中TIMESTAMP时间戳详解
- 岚图高管解读近50亿融资:东风跟投9亿 考虑后续IPO
- SAP BASIS经验书
热门文章
- nginx 配置网站页面变灰
- 关于flair中scoring card的使用
- 【c语言】【开门问题】【VS2022】
- 网络技术入门 :HTTP报文和TCP/IP数据包
- 微信公众号主页(页面模板)怎么添加
- java udp nio_Java NIO系列教程(十) Java NIO DatagramChannel
- 重复网页,网址已提交但未被选为规范网址—google
- Java 笔试:常见题目总结,html5在移动端开发优势更明显
- 我从腾讯那“偷了”3000万QQ用户数据,出了份很有趣的独家报告!
- 推荐一种便于记忆和大量管理的密码设计方式