【问题标题】:Get package with appname in different project在不同的项目中获取带有 appname 的包
【发布时间】:2016-02-17 19:00:16
【问题描述】:

我正在寻找使用PackageManager 调用第3 方应用程序的可能性。主要问题是,我的方法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);
}

【问题讨论】:

    标签: java android android-intent packages


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-29
        • 2022-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-10
        • 2017-08-17
        相关资源
        最近更新 更多