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<AndroidJavaObject>("currentActivity");
            //如何获取我们自己的创建的插件包,com.xiaodong.myapplication是包名MyApp是类名
          var my=  new AndroidJavaObject("com.xiaodong.myapplication.MyApp");
            //最后调用我们在安卓包里定义的刷新图片类
            //参数一是传入我们定义的方法,参数二是传入Unity的活动类,参数三是路径,使用参数都是在根据安卓定义的方法来传入。
            my.Call("Show", activity, path + "DCIM/Camera/MapMarker/" + name);
      }

}

Unity内图片的读写权限打开

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值