当前位置: 首页 > 知识库问答 >
问题:

从服务调用活动

汪翰墨
2023-03-14

我有一个包含服务方法的报警服务服务类。这些方法在警报服务激活时被调用。我想做的是调用这些方法中的另一个类的意图,这些方法在服务类中被调用(当警报关闭时)。它所做的只是在调用意图时标记错误。这只发生在激活警报服务时调用的方法中(服务类中的方法)。这是因为类扩展了Service而不是扩展了活动吗?我不确定,有什么想法吗?

(以下是我的服务类,当在onStart方法中调用另一个活动的意图时,应用程序强制关闭。)

public class MyAlarmService extends Service {
    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        Toast.makeText(this, "MyAlarmService.onCreate()", Toast.LENGTH_LONG).show();
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        Toast.makeText(this, "MyAlarmService.onBind()", Toast.LENGTH_LONG).show();
        return null;
    }

    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        Toast.makeText(this, "MyAlarmService.onDestroy()", Toast.LENGTH_LONG).show();
    }

    @Override
    public void onStart(Intent intent, int startId) {
        // TODO Auto-generated method stub
        super.onStart(intent, startId);

        Toast.makeText(this, "MyAlarmService.onStart()", Toast.LENGTH_LONG).show();

        //////////////////////////////////////////////////////////////////////////////////

        Intent i = new Intent("com.exercise.AndroidAlarmService.HELLO"); 
        startActivity(i); 

        The intent that is send to open another class, an activity.
        **

        /////////////////////////////////////////////////////////////////////////////////
    }

    @Override
    public boolean onUnbind(Intent intent) {
        // TODO Auto-generated method stub
        Toast.makeText(this, "MyAlarmService.onUnbind()", Toast.LENGTH_LONG).show();
        return super.onUnbind(intent);
    }
}

LogCat上的这些错误之一是:

06-24 01:11:36.857: E/AndroidRuntime(10805):java.lang.Runtime异常:无法以意图开启服务com.exercise.AndroidAlarmService.MyAlarmService@412f23f8{flg=0x4 cmp=com.exercise.AndroidAramService/.MyAramService(有额外功能)}:android.util.AndroidRuntimeExc0019:从活动上下文外部调用starActive()需要FLAG_ACTIVITY_NEW_TASK标志。这真的是你想要的吗?

共有3个答案

欧阳睿范
2023-03-14

您可以按照其他人的建议启用该标志。默认情况下阻止它的原因是,服务容易在后台由系统自动重启。如果在服务启动期间启动活动,则无论用户在做什么,此活动都会启动。这将是糟糕的用户体验。请牢记这一警告,并针对这种情况进行调整。

孟茂学
2023-03-14

您可以使用服务的onStart()调用活动......

@Override 
public void onStart(Intent intent, int startId)  { 
    ...
    Log.i("Service", "onStart() is called"); 
    Intent callIntent = new Intent(Intent.ACTION_CALL); 
    callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    callIntent.setClass(<Set your package name and class name here>);
    startActivity(callIntent);
    ...

}
单于越
2023-03-14

您尝试过错误日志建议的内容吗?

i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 类似资料:
  • 问题内容: 抱歉再次困扰您,但是我仍然找不到从活动到服务的回调方法… 找到了类似的问题- 如何在Android中定义回调? 但还不确定如何将该示例集成到我的项目中。 任何建议或指向清晰教程的链接都很棒! 问题答案: 在示例中显示的这种回调(观察者模式)在服务和活动之间不起作用。当您从类A 创建了 类B 的实例 并希望将回调从B发送到A 时,请使用观察者模式。 关于服务和活动,情况完全不同。AFAI

  • 我正在尝试创建一个locker应用程序,以显示pin视图时,用户进入到防御的应用程序。我创建了一个运行和跟踪当前前台应用程序的服务。但是,在带有android版本10的设备上,活动并不是从我的服务开始的。我知道从Android10开始一个活动是有限制的,但是,也有例外。活动可以在应用程序处于前台时从后台开始,但在我的情况下不会有帮助。所以问题是我如何才能从服务开始活动到显示pin视图? 附注:我用

  • 我想从作为web服务使用的cfc中调用cfc。web服务只是向调用者返回一个状态通知,但是我需要启动另一个cfc来启动一些进程,打开一个ftp获取一个文件并将其下载到我们的服务器。目前我得到了这个错误。操作GetFile原因550无法打开文件。详细错误:550无法打开文件。.消息FTP GetFile操作过程中出现错误。打开文件。. 当我从一个url直接调用流程cfc或从另一个页面调用时,它工作正

  • 我没有在肥皂服务公司工作过。 目前,我确实有一个wsdl文件,并将输入dto与之一起传递。 此服务将保存该数据。 我怎样才能从我的Spring启动应用程序中调用这个肥皂服务。我熟悉使用RestTemboard调用rest服务。 试过下面的一个,看起来有点复杂。任何参考资料都会很有帮助。 https://howtodoinjava.com/spring-boot/spring-soap-client

  • 问题内容: 我正在使用GWT作为Web开发框架。我需要从我的GWT客户端代码访问一些REST服务。我还需要解析JSON(或XML),这是这些服务的响应格式。哪个是解决此问题的最佳方法? 提前致谢。 问题答案: 您可以使用标准GWT调用REST服务(或者如果需要在另一个域上调用服务)。 随着JSON响应字符串,你可以调用获得,它可以是一个,等等,这是在所有可用的这个包。

  • 我需要调用WildFly 8上可用的JAX-WS Web服务。我从一个简单的例子开始。这是我的网络服务: WSDL 可在以下网址获得: http://localhost:8080/DemoWS/HelloWorld?wsdl 看看Tomcat-CXF的例子,我编写了以下路由: 通过在 Camel 上下文中运行上述代码,将返回以下错误: serviceClass=com.sample。HelloWo