1

在我的例子中,一个应用程序调用一个服务,该服务将反过来启动一个活动。我的问题是获取调用该服务的应用程序包。

有人可以帮我解决这个问题吗?

4

2 回答 2

1

我直接从 android 源代码中找到了它,它工作正常 :)

final ActivityManager am = (ActivityManager)
                getSystemService(Context.ACTIVITY_SERVICE);

        final List<ActivityManager.RecentTaskInfo> recentTasks =
                am.getRecentTasks(3, ActivityManager.RECENT_IGNORE_UNAVAILABLE);
        for (int i = 0, index = 0; i < 3 && (index < 3); ++i) {
            final ActivityManager.RecentTaskInfo recentInfo = recentTasks.get(i);

            Intent intent = new Intent( recentInfo.baseIntent);
            if ( recentInfo.origActivity != null) {
                intent.setComponent( recentInfo.origActivity);
            }

            final PackageManager pm = getPackageManager();
            final ResolveInfo resolveInfo = pm.resolveActivity(intent, 0);
            final ActivityInfo info = resolveInfo.activityInfo;
            final String title = info.loadLabel(pm).toString();

            Log.d("hello","  "+title+" "+info.packageName);
           final ImageView iv = (ImageView)findViewById(R.id.imageView1);
           iv.setImageDrawable(info.loadIcon(pm));
                ++index;
            }
于 2012-11-29T11:49:02.450 回答
0

试试这个

ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<RunningTaskInfo> tasks = am.getRunningTasks(1);
        if (!tasks.isEmpty()) {
          ComponentName topActivity = tasks.get(1).topActivity;
          if (!topActivity.getPackageName().equals(context.getPackageName())) {
            return true;
          }
        }

获得第二个顶级活动可能对您有用。

于 2012-11-29T06:29:07.523 回答