在不同的项目中获取带有 appname 的包

Get package with appname in different project

我正在寻找使用 PackageManager 调用第三方应用程序的可能性。主要问题是,我的方法 callApp 实现了另一个解决方案的接口,这是不可访问的。我只收到没有包信息的参数 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 并获取相关包。

希望对您有所帮助。

您可以像这样迭代并尝试获取 appNam。

final PackageManager pm = getPackageManager();
//get a list of installed apps.
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);

for (ApplicationInfo packageInfo : packages) {
    if(applicationInfo.loadLabel(pm).toString().equalsIgnoreCase(appName){
      string packageName = packageInfo.packageName;
    }
    Log.d(TAG, "Installed package :" + packageInfo.packageName);
    Log.d(TAG, "Launch Activity :" + pm.getLaunchIntentForPackage(packageInfo.packageName)); 
}
// the getLaunchIntentForPackage returns an intent that you can use with startActivity()