栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > Unity3D

Unity刷新安卓相册(亲测成功)

Unity3D 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Unity刷新安卓相册(亲测成功)

Unity要在安卓端刷新相册需要建安卓包,打开AndroidStudio(本人使用这个版本的android-studio-2020.3.1.25-windows),并新建项目(AndroidStudio的安装自行百度和使用)

先建一个活动

 

然后建一个Module,如果发现是灰色的看软件右下方是不是在加载东西,是的话等待加载完成才能创建Module。 

 

注意要选Android Library不然是无法生成包的。

 建一个类,名字随便起,一定要在包名内创建,不然unity是找不到类的。

 引入代码内的import,然后直接复制Show方法到自己的类里面,参数activity的作用是到时候在unity获取它的活动类,path是图片的路径,activity.sendBroadcast方法是通知系统刷新相册,只有主活动有该方法。

不建议在安卓代码里使用Class.forName(),网上很多都是用以下代码段获取unity的活动类,我使用后发现根本无法正常获取到,猜测可能是扩展包没有权限读取到主活动的原因。

  //无法获取到主活动的方法
 Class classtype = Class.forName("com.unity3d.player.UnityPlayer");
                Activity activity = (Activity) classtype.getDeclaredField("currentActivity").get(classtype);

 正常代码

package com.xiaodong.myapplication;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;


import java.io.File;

public class MyApp {

    public  void  Show(Activity activity,String path)
    {
        activity.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
                Uri.fromFile(new File(path))));
    }

}

编写完后保存。 

最后生成包

,并且等待完成 

 完成后会出现一个build文件夹,安装下图操作并且复制。

 

然后复制到Unity项目中(要在资源管理器复制,在Unity是复制不了的)。接下来相信找这种文章的朋友,Unity基本都是很熟练了,我就不讲解如何创建Unity项目了,直接上代码。

 使用前多看代码里的注释。

using UnityEngine;
using UnityEngine.UI;
using System;
using System.IO;
using System.Runtime.InteropServices;
public class TextureLoock : MonoBehaviour 
{
      //定义一张图片,如果要使用Unity项目的图片需要给图片权限读写

      public Texture texture;
       
      //定义一个保存Texture的方法
      publi  void SaveTexture(Texture texture)
      {
         Texture2D t2d = new Texture2D(t.width, t.height, TextureFormat.ARGB32, true);
        //将Texture 的像素保存到texture2D中
        t2d.SetPixels(t.GetPixels());
        //t2d.ReadPixels(new Rect(200,200,200,200),0,0,false);
        t2d.Apply();
        //编码
        byte[] imageTytes = rotate(t2d).EncodeToJPG();
        
          //获得安卓的根目录
          string path = Application.persistentDataPath.Substring(0, 
          Application.persistentDataPath.IndexOf("Android"));
       
       //创建相册文件夹,如果不存在就会创建
        Directory.CreateDirectory( path + @"DCIM/Camera");
        //将图片写入相册
          File.WriteAllBytes(path + "DCIM/Camera/图片1314520.jpg", texture.EncodeToJPG());
          //在这里我们获取到Unity里的活动类
          var playerCls = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
           //currentActivity是一个静态的字段,获得当前活动
            var activity = playerCls.GetStatic("currentActivity");
            //如何获取我们自己的创建的插件包,com.xiaodong.myapplication是包名MyApp是类名
          var my=  new AndroidJavaObject("com.xiaodong.myapplication.MyApp");
            //最后调用我们在安卓包里定义的刷新图片类
            //参数一是传入我们定义的方法,参数二是传入Unity的活动类,参数三是路径,使用参数都是在根据安卓定义的方法来传入。
            my.Call("Show", activity, path + "DCIM/Camera/MapMarker/" + name);
      }

}

Unity内图片的读写权限打开

 最后自己找张图片,创建一个游戏对象挂载脚本上去传入图片就好了这里不多演示,最后是打包安卓安装包,一定要把写入权限改成图中的一样,不然是无法写入图片的。

 最后装机运行,你就会发现每次保存都会在相册看到图片的美貌。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/900489.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号