如何使用Unity3D获取已安装的应用列表?

我正在尝试在C#中使用Unity3D制作一个Android启动器,除了检测已安装的应用程序外,一切都已到位。

我尝试了很多不同的东西,但它们都被卡在同一个地方,在PackageManager中访问getInstalledApplications

我想我已经设法通过研究android源码来复制C#中的ApplicationInfo类,至少是变量存储,所以我不认为这是一个问题,至少还没有……

简单地说,我需要URI(或者我可以用来打开应用程序的东西),应用程序的名称和应用程序的图标(字符串到它的位置,或者Texture2D本身),我尝试使用ApplicationInfo因为它有所有,然后有一些,但如果我必须单独或通过另一种方法,这是完全没问题的。

这是我现在正在做的一个例子。 无论我使用类还是对象,都会发生这种情况。

 void Start () { AndroidJavaClass pluginClass = new AndroidJavaClass("android.content.pm.PackageManager"); AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject currentActivity = jc.GetStatic("currentActivity"); Debug.Log(currentActivity.Call("getPackageName")); int flag = pluginClass.GetStatic("GET_META_DATA"); AndroidJavaClass syspackage = currentActivity.Call("getPackageManager"); 

这是我得到的错误

 AndroidJavaException: Java.lang.NoSuchMethodError: no method with name = 'getInstalledApplications' signature=Ljava/lang/Class;' in class Lcom.unity3d/player/UnityPlayerActivity; 

我该如何工作? 或者你能告诉/告诉我另一种方法来实现这个目标吗?

//编辑好吧我把它搞砸了这个小时尝试各种可能的组合,我明白了。

 AndroidJavaClass pluginClass = new AndroidJavaClass("android.content.pm.PackageManager"); AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject currentActivity = jc.GetStatic("currentActivity"); int flag = pluginClass.GetStatic("GET_META_DATA"); AndroidJavaObject pm = currentActivity.Call("getPackageManager"); AndroidJavaObject syspackages = pm.Call("getInstalledApplications", flag); 

现在我只想弄清楚如何从Java对象中获取我需要的字符串和整数以及C#字符串和整数,这是一个完全不同的问题….

您正在传递一个字符串作为getInstalledApplications的参数而不是整数。

你需要得到一个PackageManager实例,为此你需要得到一个Activity ,幸运的是,Unity可以给你。

 AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject currentActivity = jc.GetStatic("currentActivity"); AndroidJavaObject packageManager = currentActivity.Call("getPackageManager"); int flag = pluginClass.GetStatic("GET_META_DATA"); AndroidJavaObject[] arrayOfAppInfo = packageManager.Call("getInstalledApplications", flag);