我使用以下功能捕捉屏幕。这一切都有效,因为我之后可以在Gallery中看到图像,但是当我尝试将保存的图像插入MediaStore时,得到 FileNotFoundException 错误:
public static String saveScreenshotNamePath(String name){
try{
FileHandle fh;
fh = Gdx.files.external(name + ".png");
Pixmap pixmap = getScreenshot(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), false);
PixmapIO.writePNG(fh, pixmap);
pixmap.dispose();
return fh.file().getAbsolutePath();
}catch (Exception e){
return "";
}
}
我想使用bellow函数将该图片加载到 MediaStore ,但我得到 FileNotFoundException (我在Android中有WRITE_EXTERNAL_STORAGE和READ_EXTERNAL_STORAGE权限):
public void shareGoogleImage(int no_level, String path) {
File tmpFile = new File(path);
do{
try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); }
} while(!tmpFile.exists());
String photoUri = "";
try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); }
try {
photoUri = MediaStore.Images.Media.insertImage(getContentResolver(), tmpFile.getAbsolutePath(), null, null);
} catch (FileNotFoundException e1) { e1.printStackTrace(); }
try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); }
Intent share = new PlusShare.Builder(this)
.setText("See my latest Game Level " + Integer.toString(no_level) + " score")
.setType("image/png")
.setStream(Uri.parse(photoUri))
.getIntent()
.setPackage("com.google.android.apps.plus");
startActivityForResult(share, 0);
}
这就是我使用上述功能的方法:
String pathto_screencap = ScreenshotFactory.saveScreenshotNamePath("google_share_image");
my_game.google_facebook_services.shareGoogleImage(hud_display.level_no, pathto_screencap);
这是Logcat:
06-05 01:01:14.624: E/MediaStore(31555): Failed to insert image
06-05 01:01:14.624: E/MediaStore(31555): java.io.FileNotFoundException: No such file or directory
06-05 01:01:14.624: E/MediaStore(31555): at android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:146)
06-05 01:01:14.624: E/MediaStore(31555): at android.content.ContentProviderProxy.openAssetFile(ContentProviderNative.java:611)
06-05 01:01:14.624: E/MediaStore(31555): at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:925)
06-05 01:01:14.624: E/MediaStore(31555): at android.content.ContentResolver.openOutputStream(ContentResolver.java:672)
06-05 01:01:14.624: E/MediaStore(31555): at android.content.ContentResolver.openOutputStream(ContentResolver.java:648)
06-05 01:01:14.624: E/MediaStore(31555): at android.provider.MediaStore$Images$Media.insertImage(MediaStore.java:923)
06-05 01:01:14.624: E/MediaStore(31555): at android.provider.MediaStore$Images$Media.insertImage(MediaStore.java:846)
06-05 01:01:14.624: E/MediaStore(31555): at com.mygame.android.AndroidLauncher.shareGoogleImage(AndroidLauncher.java:443)
06-05 01:01:14.624: E/MediaStore(31555): at com.mygame.game._ex01MyGame.render(_ex01MyGame.java:1021)
06-05 01:01:14.624: E/MediaStore(31555): at com.badlogic.gdx.Game.render(Game.java:46)