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);