Unity3D Android:截图保存并显示到相册 您所在的位置:网站首页 保存截图到相册 Unity3D Android:截图保存并显示到相册

Unity3D Android:截图保存并显示到相册

#Unity3D Android:截图保存并显示到相册 | 来源: 网络整理| 查看: 265

在项目开发和游戏开发中,截图功能是经常会用到的,既然会用到截图功能,伴随的就是保存到相册,之前都是在Unity里面将图片直接保存在DCIM的Camera目录下,但是会出现在手机的相册里面看不到截的图,网上也找了原因,就是虽然目录下有了图片,但是安卓的广播没有告诉相册刷新。所以相册里就看不到截图。所以就有了今天的这种方法。这个方法是,先把图片保存在缓存路径,也就是Application.persistentDataPath,这个路径在任何平台都是可读写的。具体截图的方法可以去Unity3D插件:模仿手机截屏效果的截屏插件这里看,调用安卓方法的工具类Unity3D插件:调用Android原生方法工具类在这里。下面是java代码。这个代码要打成jar包。具体打包方式可以去找度娘解决。

C# 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 package com.thigh.test; import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException; import com.unity3d.player.UnityPlayer; import android.content.Context;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.Bitmap.CompressFormat;import android.graphics.BitmapFactory;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.util.Log;import android.widget.Toast; public class UnityMainActivity extends com.unity3d.player.UnityPlayerActivity { private String TAG_UNITY = "Unity";// 打印标签  public Context context;    public UnityMainActivity mainActivity; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mainActivity = this; } // 保存到相册    public void savePhoto(final String UNITY_GO_NAME,final String UNITY_CALLBACK_MOTHED_NAME,final String fileName) {     Log.i(TAG_UNITY, "unity对象的名字为:" + UNITY_GO_NAME + ",对象上脚本的方法名为:" + UNITY_CALLBACK_MOTHED_NAME);         context = mainActivity.getApplicationContext();         mainActivity.runOnUiThread(new Runnable() {            public void run() {                 Bitmap bitmap = BitmapFactory.decodeFile(Environment                        .getExternalStorageDirectory()                        + "/Android/data/" + mainActivity.getPackageName() + "/files/"                        + fileName);                 File file = new File(Environment.getExternalStorageDirectory()                        + "/DCIM/Camera", fileName);                 FileOutputStream fos = null;                try {                    fos = new FileOutputStream(file);                } catch (FileNotFoundException e) {                    // TODO Auto-generated catch block                    Log.w("cat", e.toString());                }                bitmap.compress(CompressFormat.PNG, 100, fos);                 try {                    fos.flush();                } catch (IOException e) {                    // TODO Auto-generated catch block                    Log.w("cat", e.toString());                }                try {                    fos.close();                } catch (IOException e) {                    // TODO Auto-generated catch block                    Log.w("cat", e.toString());                }                bitmap.recycle();//扫描保存的图片                context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" +Environment.getExternalStorageDirectory()                        + "/DCIM/Camera/"+fileName)));                                 Toast.makeText(context, "照片已保存到相册", Toast.LENGTH_SHORT).show();                UnityPlayer.UnitySendMessage(UNITY_GO_NAME, UNITY_CALLBACK_MOTHED_NAME, "1");            }        });    }}

当然脚本里的包名要和你Unity的PlayerSetting里的包名一致,还要配置Xml里的MainActivity。在保存完的时候我给Unity返回了一个消息,方法里的第一个参数就是Unity里接收消息的脚本的gameObject的名字,第二个参数是脚本里接收消息的方法名,第三个参数是你保存的图片名(带文件拓展名),这个参数是用来找到保存到缓存路径的图片。文章源自大腿Plus-https://www.zhaoshijun.com/archives/808 文章源自大腿Plus-https://www.zhaoshijun.com/archives/808



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有