Skip to content

AndroidJavaException: java.lang.NoSuchFieldError: no "Z" field "GrantPersistableUriPermission" in class "Lcom/yasirkula/unity/NativeGalleryMediaPickerFragment;" or its superclasses #329

@rilla1537

Description

@rilla1537

Description of the bug

I read the documentation and used persistentDataPath, but I encountered this error. I downloaded the plugin from the Asset Store.
For reference, simply retrieving the photo worked without any issues.

Reproduction steps
`using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.IO;
using NativeGalleryNamespace;

public class SceneManager : MonoBehaviour
{
public Image imageUI; // Canvas의 Image 컴포넌트 연결
private string savedImagePath;

void Awake()
{

#if !UNITY_EDITOR && UNITY_ANDROID
using( AndroidJavaClass ajc = new AndroidJavaClass( "com.yasirkula.unity.NativeGalleryMediaPickerFragment" ) )
{
ajc.SetStatic( "GrantPersistableUriPermission", true );
}
#endif
}

// Start is called before the first frame update
void Start()
{
    savedImagePath = PlayerPrefs.GetString("SavedImagePath", null);

    if (!string.IsNullOrEmpty(savedImagePath) && File.Exists(savedImagePath))
    {
        Debug.Log("Saved image found at: " + savedImagePath);
        StartCoroutine(LoadImageFromFile(savedImagePath));
    }
    else
    {
        PickImage();
    }
}

public void PickImage()
{
    NativeGallery.Permission permission = NativeGallery.GetImageFromGallery((path) =>
    {
        if (path != null)
        {
            Debug.Log("Image URI: " + path);
            StartCoroutine(LoadImageFromURI(path));
        }
    }, "Select an image", "image/*");
}

private IEnumerator LoadImageFromURI(string uri)
{
    using (var www = new WWW(uri))
    {
        yield return www;

        if (string.IsNullOrEmpty(www.error))
        {
            Texture2D texture = new Texture2D(2, 2);
            www.LoadImageIntoTexture(texture);

            // Texture2D를 파일로 저장
            string filePath = Path.Combine(Application.persistentDataPath, "savedImage.png");
            File.WriteAllBytes(filePath, texture.EncodeToPNG());

            // 저장된 경로를 PlayerPrefs에 저장
            PlayerPrefs.SetString("SavedImagePath", filePath);
            PlayerPrefs.Save();

            // Texture2D를 Sprite로 변환하여 UI에 표시
            Sprite newSprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));
            imageUI.sprite = newSprite;

            Debug.Log("Image saved to: " + filePath);
        }
        else
        {
            Debug.LogError("Failed to load image: " + www.error);
        }
    }
}

private IEnumerator LoadImageFromFile(string filePath)
{
    byte[] imageData = File.ReadAllBytes(filePath);
    Texture2D texture = new Texture2D(2, 2);
    texture.LoadImage(imageData);

    // Texture2D를 Sprite로 변환하여 UI에 표시
    Sprite newSprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));
    imageUI.sprite = newSprite;

    yield return null;
}

}
`

Platform specs

Please provide the following info if this is a Unity 3D repository.

  • Unity version: 2022.3.37f1
  • Platform: Android
  • Device: Samsung 24 Ultra (14)
  • How did you download the plugin: Asset Store 2024-08-12

Additional info

2024-08-16 22:43:51.056 31025 31054 Error Unity AndroidJavaException: java.lang.NoSuchFieldError: no "Z" field "GrantPersistableUriPermission" in class "Lcom/yasirkula/unity/NativeGalleryMediaPickerFragment;" or its superclasses
2024-08-16 22:43:51.056 31025 31054 Error Unity java.lang.NoSuchFieldError: no "Z" field "GrantPersistableUriPermission" in class "Lcom/yasirkula/unity/NativeGalleryMediaPickerFragment;" or its superclasses
2024-08-16 22:43:51.056 31025 31054 Error Unity at com.unity3d.player.UnityPlayer.nativeRender(Native Method)
2024-08-16 22:43:51.056 31025 31054 Error Unity at com.unity3d.player.UnityPlayer.-$$Nest$mnativeRender(Unknown Source:0)
2024-08-16 22:43:51.056 31025 31054 Error Unity at com.unity3d.player.UnityPlayer$F$a.handleMessage(Unknown Source:122)
2024-08-16 22:43:51.056 31025 31054 Error Unity at android.os.Handler.dispatchMessage(Handler.java:102)
2024-08-16 22:43:51.056 31025 31054 Error Unity at android.os.Looper.loopOnce(Looper.java:230)
2024-08-16 22:43:51.056 31025 31054 Error Unity at android.os.Looper.loop(Looper.java:319)
2024-08-16 22:43:51.056 31025 31054 Error Unity at com.unity3d.player.UnityPlayer$F.run(Unknown Source:24)
2024-08-16 22:43:51.056 31025 31054 Error Unity at UnityEngine.AndroidJNISafe.CheckException () [0x00000] in <00000000000000000000000000000000>:0
2024-08-16 22:43:51.056 31025 31054 Error Unity at UnityEngine.AndroidJNISafe.GetStaticFieldID (System.IntPtr clazz, System.String name, System.String sig) [0x00000] in <00000000000000000000000000000000>:0
2024-08-16 22:43:51.056 31025 31054 Error Unity

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions