2017-09-16 4 views
0

J'essaie d'afficher l'icône du profil de l'utilisateur dans mon jeu dans libgdx. Dans le côté android du code, je peux obtenir l'image uri pour le joueur en utilisant mParticipants.get(i).getIconImageUri() qui me donne le Uri. Mais je ne peux pas trouver un moyen de convertir l'Uri en Texture que je peux consommer dans mon code libgdx.Get Texture de google play services de jeu Icône Uri dans Libgdx

J'ai essayé d'abord obtenir le bitmap d'Uri en utilisant le code

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

Mais cela me donne une erreur de sécurité.

Autres réponses sur Google me montre les moyens, tous comprennent les façons de montrer l'image dans un Android ImageView mais j'ai besoin d'une texture que je peux utiliser dans mon jeu libgdx pour afficher l'image

J'ai aussi essayé d'ajouter l'autorisation suivante à mon manifeste

<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" /> 

Même alors je reçois toujours une erreur de sécurité. S'il vous plaît aidez-moi à résoudre ce problème

+1

exception de sécurité peut être due à vous utilisez targetSDK> = 23, nécessitant l'autorisation d'exécution pour les autorisations dangereuses . – Aryan

+0

Bitmap ?? Comment vous utilisez dans le module de base, Peut-être vous pouvez obtenir la chaîne d'android en interfaçant avec le module de base puis obtenir des données de texture à partir de l'adresse du lien, puis gardez les données dans fileHandler local et récupérez ces données du fichier local. – Aryan

+0

@AbhishekAmapan bitmap peut être facilement converti en texture libgdx qui peut ensuite être utilisé dans le module de base comme ** new Texture (bitmap.getWidth(), bitmap.getHeight(), Pixmap.Format.RGBA8888) ** les méthodes utilisées pour obtenir l'url http sont obsolètes –

Répondre

0

Après beaucoup de recherches, il m'a semblé que c'est pas possible pour obtenir le bitmap en lisant le flux d'entrée pour l'Uri. La seule façon de le faire est d'utiliser le ImageManager

L'exemple de code pour y parvenir est:

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); 
}