如何从活动名称获取包名称

时间:2018-05-02 11:32:28

标签: android

我使用下面的代码来获取启动器活动名称属于特定包名称:

    Intent intent = new Intent();
    intent.setPackage(aPackageName);
    intent.setAction(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_LAUNCHER);
    ResolveInfo result = getPackageManager().resolveActivity(intent, 0);

我将result.activityInfo.name保存到共享首选项

后来我想开始这个活动,但是如何获得它的包名?

或者,是否可以在不知道它所属的包名的情况下启动此活动?

    Intent launchIntent =  
    getPackageManager().getLaunchIntentForPackage(How to get the package name);

    if(launchIntent != null){
        startActivity(launchIntent);
    }

知道我保存的活动名称不是我的。

5 个答案:

答案 0 :(得分:0)

试试这个: -

public static String PACKAGE_NAME;
PACKAGE_NAME = getApplicationContext().getPackageName();

答案 1 :(得分:0)

您可以使用下面给出的代码来获取应用程序的包名称

在Java支持的代码中:

String packageName=this.getPackageName(); // where this represent the context

在Kotlin支持的代码中:

var packageName:String=this.packageName   // where this represent the context

答案 2 :(得分:0)

使用以下代码从已安装的应用中获取所有包的启动器活动:

final PackageManager pm = getPackageManager();

    Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
    mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);

    List<ResolveInfo> appList = pm.queryIntentActivities(mainIntent, 0);
    Collections.sort(appList, new ResolveInfo.DisplayNameComparator(pm));

    for (ResolveInfo temp : appList) {

        Log.v("my logs", "package and activity name = "
                + temp.activityInfo.packageName + "    "
                + temp.activityInfo.name);


    }

答案 3 :(得分:0)

唯一可靠的方法是Vladyslav Matviienko建议,它将包名称与每个活动名称一起存储在一个散列图中。感谢大家的帮助。

答案 4 :(得分:0)

要回答这个问题,

  

如何从活动名称获取软件包名称

如果您要从启动器活动中找到包名称,请检查以下内容,

String activityName = "TermuxActivity";

PackageManager pm = getPackageManager();
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);

List<ResolveInfo> activityList = pm.queryIntentActivities(intent, 0);
Collections.sort(activityList, new ResolveInfo.DisplayNameComparator(pm));
for (ResolveInfo temp : activityList) {
    if(temp.activityInfo.name.endsWith(activityName)){
        Log.i("ActivityCheck", " Activity : " +temp.activityInfo.name+ " package name: " +temp.activityInfo.packageName);
    }
}

输出:

ActivityCheck:  Activity : com.termux.app.TermuxActivity package name: com.termux