繁体   English   中英

如何列出应用程序公开的所有活动?

[英]How to list all activities exposed by an application?

我认为应该可以从清单文件中描述的“第三方”应用程序中获取所有活动。 我无法弄清楚如何。

例如:

List<Activity> aList = packManager.getActivitiesForPackage("package.name");

提前致谢!

public ActivityInfo[] getActivityList() throws NameNotFoundException {
    PackageManager pm = this.getPackageManager();

    PackageInfo info = pm.getPackageInfo(getApplicationContext.getPackageName(), PackageManager.GET_ACTIVITIES);
    
    ActivityInfo[] list = info.activities;

    return list;
}

您应该能够使用PackageManagergetPackageArchiveInfo()使用GET_ACTIVITIES标志来做到这一点。 我还没有尝试过

如果您有应用程序上下文,请使用以下命令:

private static void listAllActivities(Context context) {
    PackageManager pManager = context.getPackageManager();
    String packageName = context.getApplicationContext().getPackageName();

    try {
        ActivityInfo[] list = pManager.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES).activities;
        for (ActivityInfo activityInfo : list) {
            Log.d(TAG, "ActivityInfo = " + activityInfo.name);
        }
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }
}

谢谢你的回答!

我想我也找到了一个列出应用程序中所有活动的解决方案,虽然不是最优雅的......

//the method gets all activities for an application
private void getAppActivities() {
    PackageManager pManager = getPackageManager();
    Intent startIntent = setStartIntent();
    List<ResolveInfo> apps = pManager.queryIntentActivities(startIntent, 0);
    int count = apps.size();
    for (int i = 0; i < count; i++) {
        ResolveInfo info = apps.get(i);
        String packageName = info.activityInfo.packageName;
        Intent intent = new Intent();
        intent.setPackage(packageName);

        //activities holds the activities defined in the package
        List<ResolveInfo> activities = pManager.queryIntentActivities(intent, 0);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM