libgdx使用android控件,android-无法使用LibGDX对外部存储进行读写操作

我的创建方法如下所示:

@Override

public void create () {

batch = new SpriteBatch();

FileHandle file = Gdx.files.external("file.txt");

file.writeString("My god, it's full of stars", false);

}

我还包括:

我得到的异常是这样的:

02-13 14:45:51.858 12439-12466/com.snowdevs.tweetiebirds E/AndroidRuntime: FATAL EXCEPTION: GLThread 1120

Process: com.snowdevs.tweetiebirds, PID: 12439

com.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.(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.(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类中.

标签:file,libgdx,android

来源: https://codeday.me/bug/20191119/2033039.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值