首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Unity3D获得安装的应用程序列表?

如何使用Unity3D获得安装的应用程序列表?
EN

Stack Overflow用户
提问于 2015-07-01 08:14:12
回答 1查看 3.1K关注 0票数 4

我正在尝试用Unity3D在C#上制作一个安卓启动程序,除了检测安装的应用程序之外,一切都已经就绪。

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

我想我已经通过研究android源代码在C#中复制了C#类,至少是变量存储方面的,所以我不认为这是个问题,至少现在还不是。

简单地说,我需要URI (或者我可以用来打开应用程序的东西)、应用程序的名称,以及应用程序的图标(要么是指向其位置的字符串,要么是Texture2D本身),我尝试使用ApplicationInfo,因为它拥有所有这些,然后是一些,但是如果我必须单独或通过其他方法获取它们,这是完全可以的。

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

代码语言:javascript
运行
复制
void Start () {
                AndroidJavaClass pluginClass = new AndroidJavaClass("android.content.pm.PackageManager");

            AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            AndroidJavaObject currentActivity = jc.GetStatic<AndroidJavaObject>("currentActivity");
        Debug.Log(currentActivity.Call<string>("getPackageName"));
        int flag = pluginClass.GetStatic<int>("GET_META_DATA");
        AndroidJavaClass syspackage = currentActivity.Call<AndroidJavaClass>("getPackageManager");

这是我所犯的错误

代码语言:javascript
运行
复制
AndroidJavaException: Java.lang.NoSuchMethodError: no method with name = 'getInstalledApplications' signature=Ljava/lang/Class;' in class Lcom.unity3d/player/UnityPlayerActivity;

我该怎么做呢?或者你能告诉我/向我展示另一种实现目标的方法吗?

//编辑--好吧--我花了几个小时尝试每一个可能的组合,我得到了。

代码语言:javascript
运行
复制
AndroidJavaClass pluginClass = new AndroidJavaClass("android.content.pm.PackageManager");
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject currentActivity = jc.GetStatic<AndroidJavaObject>("currentActivity");
int flag = pluginClass.GetStatic<int>("GET_META_DATA");
AndroidJavaObject pm = currentActivity.Call<AndroidJavaObject>("getPackageManager");
AndroidJavaObject syspackages = pm.Call<AndroidJavaObject>("getInstalledApplications", flag);

现在,我只需要弄清楚如何从Java对象中获取我需要的字符串和int,并将其转化为C#字符串和int,这是一个完全不同的问题.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-01 08:45:53

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

要做到这一点,您需要掌握PackageManager,的一个实例--您需要获得一个Activity,幸运的是,Unity可以提供给您。

代码语言:javascript
运行
复制
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject currentActivity = jc.GetStatic<AndroidJavaObject>("currentActivity");

AndroidJavaObject packageManager = currentActivity.Call<AndroidJavaObject>("getPackageManager");

int flag = pluginClass.GetStatic<int>("GET_META_DATA");

AndroidJavaObject[] arrayOfAppInfo = packageManager.Call<AndroidJavaObject[]>("getInstalledApplications", flag);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31155974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档