android从服务启动活动
安卓:android从服务启动活动,android,android-activity,android-service,Android,Android Activity,Android Service,安卓: public class LocationService extends Service { @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); startActivity(new Intent(this, activity.class)); } } 我从活动 在活动中如果条件满足启动条件 startSer
public class LocationService extends Service {
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
startActivity(new Intent(this, activity.class));
}
}
我从活动
在活动中
如果条件满足启动条件
startService(new Intent(WozzonActivity.this, LocationService.class));
从上面提到的我的
位置服务
无法启动活动
,如何在服务类中获取当前正在运行的活动
的上下文?从服务类内部:
Intent dialogIntent = new Intent(this, MyActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(dialogIntent);
另一件值得一提的事情是:当我们的任务在后台时,上面的答案很好,但如果我们的任务(由服务+一些活动组成)在前台(即用户可以看到我们的一个活动),我唯一能让它工作的方法是:
Intent intent = new Intent(storedActivity, MyActivity.class);
intent.setAction(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
storedActivity.startActivity(intent);
我不知道ACTION\u VIEW或FLAG\u ACTIVITY\u NEW\u TASK在这里是否有实际用途。成功的关键是
storedActivity.startActivity(intent);
当然,为了不再次实例化活动,需要将活动重新排序。祝你好运 我也有同样的问题,我想让你知道,以上这些都不适合我。 对我起作用的是:
Intent dialogIntent = new Intent(this, myActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(dialogIntent);
在我的一个子类中,存储在一个单独的文件中,我必须:
public static Service myService;
myService = this;
new SubService(myService);
Intent dialogIntent = new Intent(myService, myActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
myService.startActivity(dialogIntent);
所有其他答案都给了我一个
nullpointerexception
如果您需要从您的服务中重新调用bacgrounde中的活动,我建议使用以下链接。Intent.FLAG\u ACTIVITY\u NEW\u任务不是解决方案
或者
您可以使用自己的应用程序类并从任何需要的地方调用(特别是非活动)
并注册您的应用程序类:
<application android:name="yourpackage.App" ...
不能使用
服务的上下文
;能够获得(包)上下文
相似:
Intent intent = new Intent(getApplicationContext(), SomeActivity.class);
更新ANDROID 10及更高版本
不再允许从服务(前台或后台)启动活动
文档中仍然存在一些限制
这不起作用。这给了我一个错误:“从活动上下文外部调用startActivity()需要标志\u Activity\u NEW\u TASK标志。这真的是您想要的吗?”这是因为对setFlags的第二次调用覆盖了第一次调用。此解决方案应使用addFlags或单个调用来设置将Intent.FLAG\u ACTIVITY\u NEW\u TASK&&Intent.FLAG\u ACTIVITY\u REORDER\u传递到\u FRONT的标志。您不希望将标志与&;您希望使用|(按位或按位的单个条)Intent Intent=new Intent(storedActivity,MyActivity.class);intent.setAction(intent.ACTION\u视图);intent.addFlags(intent.FLAG\u活动\u新任务);intent.addFlags(intent.FLAG\u ACTIVITY\u REORDER\u TO\u FRONT);storedActivity.startActivity(意向);只需要标记“活动”或“新建”任务,因为只有活动可以在没有它的情况下启动活动。”此“”可用于代替getBaseContext和getApplication,因为该服务有自己的上下文。如何以编程方式从最近的屏幕列表中删除该活动?如果该服务位于后台,则不起作用。对此有任何修复吗?请帮助我从后台服务打开应用程序,我已使用Firebase(FCM)服务。我想从我的应用程序打开我的呼叫UI屏幕,所以请帮助我,当应用程序在后台时,我已经在我的服务中编写了你的代码,我看到该服务在小米a2上工作,但在小米redmi note 7上不工作,你能帮我解释为什么它在一个设备上工作,而在另一个设备上不工作吗?你将服务存储在一个静态字段中,这可能导致内存泄漏startActivity与此相同。startActivity!你从你的服务中创建了一个无用的实例,为什么?注意使用一个上下文的静态实例,它会导致一些记忆leaks@crgarridos不。这是应用程序上下文,本质上是单例的,不会导致内存泄漏。我会更改行context=getApplicationContext()代码>到上下文=此代码>我认为这只适用于标记活动\u新任务
flag@RahulBhobe我发现这个答案很有帮助,因为添加了系统警报窗口
(并在设置中启用它)解决了我在Android 10上的问题。在Go Edition设备中无法授予系统警报窗口。
App.getContext();
Intent intent = new Intent(getApplicationContext(), SomeActivity.class);