C# “无法存储屏幕截图”

C# “无法存储屏幕截图”,c#,android,unity3d,C#,Android,Unity3d,我正在使用“Screen Capture.Capture Screen Shot pathToSave”截图,它在unity中非常有效,我的代码: string timeStemp = System.DateTime.Now.ToString("dd-MM-yyyy-HH-mm-ss"); string fileName = "Screenshoot" + timeStemp + ".png"; string pathToSave = Application.persistentData

我正在使用“Screen Capture.Capture Screen Shot pathToSave”截图,它在unity中非常有效,我的代码:

string timeStemp = System.DateTime.Now.ToString("dd-MM-yyyy-HH-mm-ss");
string fileName = "Screenshoot" + timeStemp + ".png";    
string pathToSave = Application.persistentDataPath + "/" + fileName;
但当我构建游戏并在Android上运行时,它就不起作用了。 使用Android Desive monitor,我可以看到以下错误:


有没有关于如何解决这个问题的想法?

这是一个权限问题,因为您可以看到错误表明它无法存储它,而不是接受它?或者你可以试着改变输出目录,把它放在应用程序的文件夹里是很奇怪的

请求存储权限注意,您可能希望请求访问android 6.0以上的用户

<manifest ...>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    ...
</manifest>

只是想晚一点结束这个问题,而不是永远。 我使用了以下免费资产商店插件:[


在一个vary简单的代码中,我只需要检查权限并请求权限,但一开始它不起作用,在与编写代码的vary好人聊天后,我们发现删除清单中权限行末尾的:android:maxSdkVersion=18就可以了。所以现在我可以请求权限了。谢谢大家!

Ar你的存储空间用完了吗?你请求过android的权限存储吗?该文件是一个png,其代码字符串fileName=screenshot+timestep+.png;在Unity中,我可以看到我创建的文件,一个健康png文件。我在手机上获得了免费存储空间。你的文件名中的路径似乎增加了一倍。你能提供一个更完整的代码片段?如果您将fileName设置为a.png作为临时测试,它是否有效?感谢您的回答,我检查了live in manifest文件的权限,它存在,我将它复制到Plugins/Android中只是为了确保“无法存储屏幕截图,为了进行空间检查,您有吗,或者可以告诉我一个C示例?@DrorDavidovich抱歉,我没有这段代码的C版本,但它应该很容易翻译,请使用Intelissense查找正确的引用。例如getExternalStorage变为.ExternalStorage。您还应该检查您的android版本。”在上,如果您在6.0以上,仅向清单添加权限是不够的,您必须请求它。请参见此处的参考:谢谢,我将尝试了解运行时权限,并将向您更新所有工作的进展情况。
/* Checks if external storage is available for read and write */
public boolean isExternalStorageWritable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        return true;
    }
    return false;
}

/* Checks if external storage is available to at least read */
public boolean isExternalStorageReadable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state) ||
        Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
        return true;
    }
    return false;
}