在不同的项目中获取包含appname的包

时间:2016-02-17 10:44:37

标签: java android android-intent packages

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

初始化Intent时,我必须手动添加我的packagepath(此处为: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);
}

2 个答案:

答案 0 :(得分:2)

您可以迭代并尝试像这样获取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() 

答案 1 :(得分:1)

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

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并获得相关的包。

希望有所帮助。