Не удается вставить снимок экрана в MediaStore - LIBGDX
Я снимаю экран, используя следующие функции. Все это работает, потому что потом я вижу изображение в Галерее, но когда я пытаюсь вставить сохраненное изображение в 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 "";
}
}
Я хочу загрузить это изображение в MediaStore с помощью функции ниже, но я получаю FileNotFoundException (у меня есть разрешения WRITE_EXTERNAL_STORAGE и READ_EXTERNAL_STORAGE в Android):
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)