java - 获取不同项目中具有应用程序名称的包

标签 java android android-intent package

我正在寻找使用PackageManager调用第3方应用程序的可能性。主要问题是,我的方法 callApp 实现了另一个解决方案的接口(interface),该接口(interface)无法访问。我只收到参数appName,没有包信息。

初始化Intent时,我必须手动添加我的包路径(此处:com.example)。

我想要实现的是,Android 找到与该名称匹配的包的全名。因为此方法是另一个项目的一部分,所以我无法使用 getApplicationContext().getPackageName(); 或类似方法。有什么想法吗?

public void callApp(int methodIndicator, String appName, String command, Map<String, String> args) {
    PackageManager pm = context.getPackageManager();

    // < Should only be the name
    Intent launchIntent = pm.getLaunchIntentForPackage("com.example."+appName);   
    launchIntent.putExtra("method", methodIndicator);
    launchIntent.putExtra("command", command);
    launchIntent.putExtra("args", new HashMap<String, String>(args));
    launchIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

    context.startActivity(launchIntent);
}

最佳答案

为了获取设备上已安装应用程序的列表,您可以使用以下代码:

PackageManager pm = context.getPackageManager();
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> pgList = pm.queryIntentActivities(mainIntent, 0);

for (ResolveInfo rInfo : pgList) {
    // do your stuff
}

ResolveInfo对象通过以下访问器提供对名称和包的访问:

rInfo.activityInfo.packageName // the application package
rInfo.activityInfo.loadLabel(pm).toString() // the application name as displayed in launcher

从那里您可以查找您的 appName 并获取相关的包。

希望有帮助。

关于java - 获取不同项目中具有应用程序名称的包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35454411/

相关文章:

java - 在日志附加程序中记录堆栈跟踪

java - 使用 Android 应用程序在 Java/Tomcat 服务器中进行 Windows 身份验证

java - 如何为 JVM 崩溃日志文件指定唯一的名称?

android - 如何从表中删除列包含特定字符串的行?

android - 如何在 Android 服务中启动没有标志 FLAG_ACTIVITY_NEW_TASK 的 Intent ?

java - 如何阻止多个 Intent 依次打开?

java - 在 JScrollPane 中滚动 JComponent

android - 同步两个 GLSurfaceViews

android - 创建一个随机的正弦图,如风景 Sprite

android - Android 的 Gmail 应用程序是否删除了通过 Intent 发送 HTML 电子邮件的功能?