我怎样才能找出一个服务(不是在我的应用程序)是从哪个意图开始的?

我想知道Google地图服务是如何自动启动的。

当我转储主缓冲区或事件缓冲区的logcat时,我只能找出Google Maps的哪个组件已经启动,但没有关于“谁” (包)启动它的线索,以及“如何” (意图)?

有没有可以用来找出它们的debugging方法?

Solutions Collecting From Web of "我怎样才能找出一个服务(不是在我的应用程序)是从哪个意图开始的?"

我设法find“如何”,但仍然没有find关于“谁”的线索。

“怎么样”

运行dumpsys activity services ,查看intent字段:

 * ServiceRecord{41526f40 u0 com.google.android.apps.maps/com.google.android.location.internal.server.GoogleLocationService} intent={act=com.google.android.location.internal.GMM_NLP} packageName=com.google.android.apps.maps 

我希望这是解决您的问题

 String uri = "geo:" + 0 + "," + 0 + "?q=" + address; Intent intent = new Intent(Intent.ACTION_VIEW, Uri .parse(uri)); startActivity(intent); 

你可以使用ActivityManager作为黑客来获取它。 就像是:

 ActivityManager aManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); List<ActivityManager.RecentTaskInfo> recentTaskList = aManager.getRecentTasks(1, 0); Intent caller = recentTaskList.get(0).baseIntent; 

我在这里跳过validation,但这应该让你开始。

不要忘记GET_TASKS权限。