以上代码路径的话存储在"内部存储/Andorid/data/com.company.projectName.../DCIM/Screenshots"这样没有办法自带相册软件中显示,有没有办法解决?
时间: 2023-12-04 21:03:21 浏览: 132
【计算机专业-Andorid项目源码100套之】H.264视频编解码
是的,如果你想要在自带相册软件中显示保存的截屏图片,可以使用Android的媒体库来实现。下面是修改后的代码:
```csharp
using UnityEngine;
using System.IO;
public class ScreenShot : MonoBehaviour
{
// 截屏按钮点击事件
public void CaptureScreen()
{
StartCoroutine(SaveScreenshot());
}
// 保存截屏的协程
private IEnumerator SaveScreenshot()
{
// 等待一帧,确保UI的更新完成
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();
// 获取截屏的字节数组
byte[] bytes = screenshot.EncodeToPNG();
// 获取应用程序包名
string packageName = Application.identifier;
// 创建存储路径
string folderPath = Path.Combine("/storage/emulated/0/DCIM/Screenshots", packageName);
Directory.CreateDirectory(folderPath);
// 获取当前时间作为截屏文件名
string fileName = System.DateTime.Now.ToString("yyyyMMddHHmmss") + ".png";
// 保存截屏到本地存储
string filePath = Path.Combine(folderPath, fileName);
File.WriteAllBytes(filePath, bytes);
// 将截屏添加到媒体库中
using (AndroidJavaClass mediaClass = new AndroidJavaClass("android.media.MediaScannerConnection"))
{
mediaClass.CallStatic("scanFile", new object[] { filePath, null });
}
Debug.Log("截屏保存成功:" + filePath);
}
}
```
这段代码中,我们使用`/storage/emulated/0/DCIM/Screenshots`作为存储路径,而不是使用`Application.persistentDataPath`。然后,我们获取应用程序包名(即包含在`Application.identifier`中),并将其作为子文件夹添加到存储路径中。
最后,我们使用`MediaScannerConnection`类的`scanFile`方法将截屏添加到媒体库中,这样相册应用程序就能够显示新保存的截屏。
请注意,在使用这段代码之前,你需要确保你的应用程序具有存储权限,并且在Android设备上进行测试。
阅读全文