Android:将变量传递给已经运行的服务

Posted

技术标签:

【中文标题】Android:将变量传递给已经运行的服务【英文标题】:Android: Passing variables to an already running service 【发布时间】:2013-02-27 02:31:48 【问题描述】:

我在将值从 Activity 传递到已运行的服务时遇到问题。我想知道最好的方法是什么?添加额外内容将不起作用,因为我认为这必须在意图开始之前完成? (如果我错了纠正我)。

任何帮助都会很棒!如果需要,我可以详细说明。

丹。

【问题讨论】:

【参考方案1】:

如果您的服务不是IntentService,您可以多次调用startService(...)。该服务将第一次运行,但下一次调用将导致新的 onStartCommand() 调用以及您需要的新附加功能。

检查this answer 和doc。

【讨论】:

同意,这里有来自Activity#startService() 文档的更多证据。 啊,我明白了。不知道我是如何错过阅读文档的。感谢您的快速答复! 另见this answer,它解释了如何在onStartCommand() 期间调用startService() 来传递新的Intent 并在您的服务中读取它们。基本上与此处的答案相同,但更冗长。【参考方案2】:

将意图额外传递给服务 从活动开始这个意图 如果服务正在运行,请从活动中尝试此操作并使用 putExtra 传递参数。

Intent rc = new Intent(getApplicationContext(), myService.class);
rc.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //important for android 10
rc.putExtra("parama","ciao");
rc.putExtra("paramb","hello");
startService(rc);

记住,新线程,退出到主线程。

new Thread()
    @Override
        public void run() 
            super.run();
            //start service..
            

您的服务

 public class myService extends Service 
               @Override
                public int onStartCommand(Intent intent, int flags, int startId) 
                if (intent.hasExtra("parama"))            
                Bundle b=new Bundle();
                b=intent.getExtras();
                String par_a=b.getString("parama");
                
                if (intent.hasExtra("paramb"))            
                Bundle b=new Bundle();
                b=intent.getExtras();
                String par_b =b.getString("paramb");
                
        
    

【讨论】:

以上是关于Android:将变量传递给已经运行的服务的主要内容,如果未能解决你的问题,请参考以下文章

将变量传递给 Windows SSH 服务器

如何将 $_SESSION 变量传递给 websocket 服务器?

将变量传递给 psql 脚本

将 JavaScript 值传递给 PHP 变量(有限制)

使用意图将变量传递给另一个android活动

将变量传递给 Google Cloud 函数