android-无法使用LibGDX对外部存储进行读写 *** 作

android-无法使用LibGDX对外部存储进行读写 *** 作,第1张

概述我的创建方法如下所示:@Overridepublicvoidcreate(){batch=newSpriteBatch();FileHandlefile=Gdx.files.external("file.txt");file.writeString("Mygod,it'sfullofstars",false);}我还包括:<uses-permissionandroid:

我的创建方法如下所示:

@OverrIDepublic voID create () {    batch = new SpriteBatch();    fileHandle file = Gdx.files.external("file.txt");    file.writeString("My god, it's full of stars", false);}

我还包括:

<uses-permission androID:name="androID.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission androID:name="androID.permission.READ_EXTERNAL_STORAGE"/>

我得到的异常是这样的:

02-13 14:45:51.858 12439-12466/com.sNowdevs.tweetIEbirds E/AndroIDRuntime: FATAL EXCEPTION: GLThread 1120Process: com.sNowdevs.tweetIEbirds, PID: 12439com.badlogic.gdx.utils.GdxRuntimeException: Error writing file: file.txt (External)    at com.badlogic.gdx.files.fileHandle.writeString(fileHandle.java:353)    at com.badlogic.gdx.files.fileHandle.writeString(fileHandle.java:339)    at com.sNowdevs.tweetIEbirds.TweetIEBirdsGame.create(TweetIEBirdsGame.java:22)    at com.badlogic.gdx.backends.androID.AndroIDGraphics.onSurfaceChanged(AndroIDGraphics.java:254)    at androID.opengl.GLSurfaceVIEw$GLThread.guardedRun(GLSurfaceVIEw.java:1519)    at androID.opengl.GLSurfaceVIEw$GLThread.run(GLSurfaceVIEw.java:1240) Caused by: com.badlogic.gdx.utils.GdxRuntimeException: Error writing file: file.txt (External)    at com.badlogic.gdx.files.fileHandle.writer(fileHandle.java:330)    at com.badlogic.gdx.files.fileHandle.writeString(fileHandle.java:350)    at com.badlogic.gdx.files.fileHandle.writeString(fileHandle.java:339)     at com.sNowdevs.tweetIEbirds.TweetIEBirdsGame.create(TweetIEBirdsGame.java:22)     at com.badlogic.gdx.backends.androID.AndroIDGraphics.onSurfaceChanged(AndroIDGraphics.java:254)     at androID.opengl.GLSurfaceVIEw$GLThread.guardedRun(GLSurfaceVIEw.java:1519)     at androID.opengl.GLSurfaceVIEw$GLThread.run(GLSurfaceVIEw.java:1240)  Caused by: java.io.fileNotFoundException: /storage/emulated/0/file.txt: open Failed: EACCES (Permission denIEd)    at libcore.io.IoBrIDge.open(IoBrIDge.java:452)    at java.io.fileOutputStream.<init>(fileOutputStream.java:87)    at com.badlogic.gdx.files.fileHandle.writer(fileHandle.java:322)    at com.badlogic.gdx.files.fileHandle.writeString(fileHandle.java:350)     at com.badlogic.gdx.files.fileHandle.writeString(fileHandle.java:339)     at com.sNowdevs.tweetIEbirds.TweetIEBirdsGame.create(TweetIEBirdsGame.java:22)     at com.badlogic.gdx.backends.androID.AndroIDGraphics.onSurfaceChanged(AndroIDGraphics.java:254)     at androID.opengl.GLSurfaceVIEw$GLThread.guardedRun(GLSurfaceVIEw.java:1519)     at androID.opengl.GLSurfaceVIEw$GLThread.run(GLSurfaceVIEw.java:1240)  Caused by: androID.system.ErrnoException: open Failed: EACCES (Permission denIEd)    at libcore.io.Posix.open(Native Method)    at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)    at libcore.io.IoBrIDge.open(IoBrIDge.java:438)    at java.io.fileOutputStream.<init>(fileOutputStream.java:87)     at com.badlogic.gdx.files.fileHandle.writer(fileHandle.java:322)     at com.badlogic.gdx.files.fileHandle.writeString(fileHandle.java:350)     at com.badlogic.gdx.files.fileHandle.writeString(fileHandle.java:339)     at com.sNowdevs.tweetIEbirds.TweetIEBirdsGame.create(TweetIEBirdsGame.java:22)     at com.badlogic.gdx.backends.androID.AndroIDGraphics.onSurfaceChanged(AndroIDGraphics.java:254)     at androID.opengl.GLSurfaceVIEw$GLThread.guardedRun(GLSurfaceVIEw.java:1519)     at androID.opengl.GLSurfaceVIEw$GLThread.run(GLSurfaceVIEw.java:1240) 

我将Nexus 5与AndroID 6棉花糖一起使用进行测试.
我经过搜索发现,AndroID 6使用了运行时权限,但是libGDX开发人员说它甚至可以在AndroID 6上运行.是否有修复程序,具有或不具有运行时权限?

解决方法:

我通过检查用户是否已授予外部存储的权限来解决问题,如果未通过以下方式授予用户请求权限,则可以解决此问题:

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {                if (this.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {                     this.requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, WRITE_REQUEST_CODE);            }

所有这些都是androID特定的代码,因此位于AndroIDLauncher类中.

总结

以上是内存溢出为你收集整理的android-无法使用LibGDX对外部存储进行读写 *** 作全部内容,希望文章能够帮你解决android-无法使用LibGDX对外部存储进行读写 *** 作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1120589.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存