从 google 获取纹理 在 Libgdx 玩游戏服务 Icon Uri

Get Texture from google play game services Icon Uri in Libgdx

我正在尝试在 libgdx 的游戏中显示用户个人资料图标。在代码的 android 端,我可以使用 mParticipants.get(i).getIconImageUri() 获取播放器的图像 uri,这为我提供了 Uri。但是我找不到一种方法将 Uri 转换为我可以在 libgdx 代码中使用的纹理。

我首先尝试使用代码从 Uri 获取位图

Bitmap bitmap = null;
    try {
        InputStream inputStream = application.getContentResolver().openInputStream(imgUri);
        bitmap = BitmapFactory.decodeStream(inputStream);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

但这给了我一个安全错误。

google 上的其他答案向我展示了方法,所有这些都包括在 Android ImageView 中显示图像的方法,但我需要一个可以在我的 [=30= 中使用的纹理] 游戏显示图片

我也试过向我的清单添加以下权限

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

即便如此,我仍然遇到安全错误。请帮我解决这个问题

经过大量研究,在我看来,不可能通过读取 Uri 的输入流来获取位图。唯一的方法是使用 ImageManager

实现这个的示例代码是:

private void SetUserIconForPlayer(final Player player, Uri uri)
{
    ImageManager mgr = ImageManager.create(application);
    mgr.loadImage(new ImageManager.OnImageLoadedListener() {
        @Override
        public void onImageLoaded(Uri uri,final Drawable drawable, boolean isRequestedDrawable) {
            if(isRequestedDrawable)
            {
                Gdx.app.postRunnable(new Runnable() {
                    @Override
                    public void run() {
                        player.SetUserIcon(GetTextureFromDrawable(drawable));
                    }
                });
            }
        }
    }, uri);
}