Unity项目接入应用宝SDK实现截图功能


问题由来

  • 点击应用宝悬浮窗

  • 如图所示 左下角有一个截图按钮

需要解决那些问题

  • 截图信息需要由游戏引擎提供

  • SDK获取截图信息为同步 但是Unity引擎没有提供同步接口

  • 如何防止测试同学和智障不停的点击截图按钮

点击截图按钮程序流程

  • SDK调用caputureImage方法获取截图信息

  • 在caputureImage方法中通知Unity截图

  • 在caputureImage方法中等待截图信息

  • Unity截图完成后发送给安卓层

  • 返回数据给SDK

  • 实现一个缓存5秒截图信息功能

unity代码

  • 安卓层通知Unity截图接口
public void CaputureImage()
{
StartCoroutine(Caputure());
}
  • Unity获取截图信息返回给安卓层
IEnumerator Caputure()
{
//等待当前帧渲染完成
yield return new WaitForEndOfFrame(); // 先创建一个的空纹理,大小可根据实现需要来设置
Texture2D screenShot = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false); // 读取屏幕像素信息并存储为纹理数据,
screenShot.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
screenShot.Apply(); // 然后将这些纹理数据,成一个png图片文件
byte[] bytes = screenShot.EncodeToPNG(); //把数据返回给安卓层
using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
{
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("SendScreenshotData", bytes);
}
}

Android代码

  • 定义Bitmap变量
  • 定义Timer定时
Bitmap bitmap = null;
Timer timer = null;
  • 接受Unity发送过来的截图信息并转换为Bitmap类型
public void SendScreenshotData(byte[] bytes)
{
bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
}
  • SDK截图回调
// 游戏助手内截屏分享功能
YSDKApi.setScreenCapturer(new IScreenImageCapturer() {
@Override
public Bitmap caputureImage() { //如果没有缓存则通知Unity截图
if (bitmap == null) { UnityPlayer.UnitySendMessage("Directional Light", "CaputureImage", "");
} //强行延迟等待截图数据
while (bitmap == null) { try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} //开始一个5秒定时器
if (timer == null) { timer = new Timer(); timer.schedule(new TimerTask() {
@Override
public void run() { //删除缓存和定时器
bitmap = null; timer = null;
}
}, 5000);
} return bitmap; }
});

如果你有更好的思路和解决方法,也请多多指教

Unity项目接入应用宝SDK实现截图功能的更多相关文章

  1. 接入淘宝SDK(OneSDK)和支付宝SDK(AlipaySDK)出现 duplicate symbols for architecture i386

    起初我在我的项目中先接入了AlipaySDK,没有出现什么问题,之后想要接入淘宝SDK之后,就出现了duplicate symbols for architecture i386的错误 经过一段时间排 ...

  2. Unity 下集成第三方原生 SDK,以极光厂商通道为例

    Unity中集成三方SDK有两种方式: Unity 项目开发中时常有集成 Android 第三方 SDK 的需求,比如接入第三方推送,分享等功能.而第三方 SDK 的集成文档提到的往往是基于原生 An ...

  3. unity工程接入Android sdk后真机测试解锁屏后退出的解决

    unity工程接入如91.移动支付等Android sdk后,真机运行尤其是在4.0+以上坏境,往往会出现解锁屏后退出的情况,解决办法如下: 可以在AndroidManifest.xml中所有的con ...

  4. Unity快速接入SDK框架

    先把工程源码贴出来: 链接:http://pan.baidu.com/s/1geDhtS3 密码:i0s9 最近接android ios的SDK 已经接了10多个 有点心得 分享一下 如果有更好想法求 ...

  5. 《转》iOS 平台 Cocos2d-x 项目接入新浪微博 SDK 的坑

    最近在做一个 iOS 的 cocos2d-x 项目接入新浪微博 SDK 的时候被“坑”了,最后终于顺利的解决了.发现网上也有不少人遇到一样的问题,但是能找到的数量有限的解决办法写得都不详细,很难让人理 ...

  6. 教你高速高效接入SDK——Unity统一接入渠道SDK(Android篇)

    U8SDK的设计之初,就是为了可以支持各种游戏引擎开发的游戏,而不不过Android的原生平台.眼下一大半的手游,都是採用Unity3D和Cocos2dx开发,那么这里,我们就先来一步步给大家演示,用 ...

  7. Unity接入多个SDK的通用接口开发与资源管理(三)

    接着上篇,介绍SDK资源的导入.首先介绍一下Android Studio工程. AS工程可以由多个Module组成,我们可以把某个Module作为我们打包的Module,其他的Module当做资源导入 ...

  8. Unity接入多个SDK的通用接口开发与资源管理(二)

    接着上篇,本篇对SDK接口进行封装.在开始之前,需要先了解下面知识. (1)unity与android之间的交互 unity通过下面方式调用android中的函数: 方法一: AndroidJavaC ...

  9. Unity接入多个SDK的通用接口开发与资源管理(一)

    每一款游戏都有接入多个SDK的需求.当接入多个SDK时会面临两个问题: (1)代码层面:每个SDK都有调用各自功能的方法,我们需要统一管理每个SDK提供的方法,这样会使每个SDK调用方便,使代码整洁易 ...

随机推荐

  1. Codeforces Round #543 (Div. 2)B,C

    https://codeforces.com/contest/1121 B 题意 给你n(<=1000)个数ai,找出最多对和相等的数,每个数只能用一次,且每个数保证各不相同 题解 重点:每个数 ...

  2. s5-2 Cpu调度算法

    调度程序采用什么算法选择一个进程(作业)? 如何评价调度算法的性能? 调度准则 CPU利用率 – 使CPU尽可能的忙碌 吞吐量 – 单位时间内运行完的进程数 周转时间 – 进程从提交到运行结束的全部时 ...

  3. java学习1ATM

    package atm_1; import java.awt.SystemTray;import java.nio.charset.CharsetEncoder;import java.util.Sc ...

  4. 第03章:MongoDB启动参数说明

    ①基本配置 --quiet # 安静输出 --port arg # 指定服务端口号,默认端口27017 --bind_ip arg # 绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定默 ...

  5. VS2008卡死无反映解决

    终于解决了我的vs卡死的问题.最初只发现打开aspx页面会卡死,打开cs文件不会.并且每次卡死都会发现进程中有启动“setup.exe”,这是office的修复程序.这样就很好理解了,vs中的设计视图 ...

  6. 鼠标经过,显示悬浮DIV

    属牛人的本命佛是虚空藏菩萨.属牛人可佩戴属牛黄玉本命佛来提升财运,黄玉的金黄色代表蒸蒸日上,而“金黄”也就是“黄金”的到(倒)来,象征着富贵与财气,佩戴可以招财招富贵,同时黄玉亦是希望之石,可带来智慧 ...

  7. leetcode - [2]Evaluate Reverse Polish Notation

    Evaluate Reverse Polish Notation Total Accepted: 24595 Total Submissions: 123794My Submissions Evalu ...

  8. Codeforces Beta Round #27 E. Number With The Given Amount Of Divisors 含n个约数最小数

    http://codeforces.com/problemset/problem/27/E RT,求含n个约数的最小的数 我们设答案p = 2^t1 * 3^t2 * -- * p^tk(其中p是第k ...

  9. 【Android开发那点破事】打开APP加载页面实现

    今天的破事呢就说说APP加载页面的实现.一般情况下,当APP打开的时候,我们需要做很多事情,比如检查网络连接啊,初始化一些配置啊等等.我们可以让这些事情在APP完全打开之前做完,然后呢在打开的过程中显 ...

  10. 使用 ipmitool 实现远程管理Dell 系列服务器

    IBM 文档:       http://www.ibm.com/developerworks/cn/linux/l-ipmi/index.html ipmi命令收集: http://hi.baidu ...