Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从服务启动活动?_Android - Fatal编程技术网

Android 如何从服务启动活动?

Android 如何从服务启动活动?,android,Android,是否可以从服务启动活动?如果是,我们如何实现这一点?android.app.Service是android.app.Context的后代,因此您可以直接使用startActivity。但是,由于您在任何活动之外启动此操作,因此需要在intent上设置FLAG\u activity\u NEW\u TASK标志 例如: Intent i = new Intent(); i.setClass(this, MyActivity.class); i.setFlags(Intent.FLAG_ACTIVI

是否可以从服务启动活动?如果是,我们如何实现这一点?

android.app.Service
android.app.Context
的后代,因此您可以直接使用
startActivity
。但是,由于您在任何活动之外启动此操作,因此需要在intent上设置
FLAG\u activity\u NEW\u TASK
标志

例如:

Intent i = new Intent();
i.setClass(this, MyActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);

其中
这是您的服务。

我从服务启动活动时遇到问题,原因是缺少标志\u activity\u NEW\u TASK intent标志。

这肯定会解决您的问题

Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ComponentName cn = new ComponentName(this, TaxiPlexer.class);
intent.setComponent(cn);
startActivity(intent);

即使框架允许您从服务启动活动,它也可能不是一个合适的解决方案。原因是,在服务希望与用户交互时,服务任务可能是用户的焦点,也可能不是用户的焦点。打断用户当前正在做的事情被认为是糟糕的设计形式,尤其是在后台操作的东西


因此,您应该考虑使用通知服务的通知,当用户决定进行调查时,该通知带有启动意图来启动所需的活动。可以将其视为延迟的满足。

这很好,但每次活动都会像新开始的活动一样开始。这种电话只起作用一次。或者我错过了什么@你知道这是不是故意的吗?换句话说,你知道谷歌工程师设计的服务是否能够在没有用户交互的情况下打开一个活动,过程是否总是顺利的吗?@MikeIsrael我相信是的。想象一下,在后台运行的系统服务无法在传入呼叫时显示接受/拒绝活动。因为您是服务的开发人员,并且您知道要显示什么活动,所以这一切都取决于您自己。您可以使用从应用程序启动的服务执行某些操作,例如,在某些触发器上激活应用程序;就像在通知栏中更新状态和单击启动应用程序一样。@MarcinGil这更像是我的问题。既然已经有了请求打开应用程序的机制(通知),那么直接启动该活动是否会是某种黑客行为,以从启动应用程序的过程中删除用户输入。@MikeIsrael No hack。您可以从服务中调用
startActivity()
,就像在应答中一样。你什么时候做--这取决于你。举个简单的例子:实现一个服务,注册一个广播,然后使用警报发送这个广播。在广播处理例行程序中,启动所需的活动。这样你就可以启动你的服务一次,让它在应用程序关闭后继续运行,并在某些触发时打开一些活动,而不需要进一步的用户交互。您好,我有一个当应用程序从服务关闭时启动活动的问题(FCM)。上面的代码只有在应用程序已经打开时才有效。请帮助我从后台运行此打开应用程序service@DipankiJadav面对同样的问题,你找到解决方法了吗?我不知道,但我可以直接从服务开始活动,而不需要任何标志,它工作正常!我只是讨厌当我的闹钟按照用户告诉我的方式来打断我的睡眠。。。允许这一点的是让最终用户自己决定他们认为重要的东西。如果您担心在用户请求打开某个特定应用程序时会打断用户正在做的事情,那么您没有考虑用户的需求和愿望。接听电话就是一个完美的例子。。。你认为与其直接接听电话,不如下拉通知区域,单击手机应用程序通知,然后选择接听、发送不接听原因或忽略电话?这对用户来说又如何更方便呢?