4

我有一个活动,创建一个intent,putExtra()和额外的putExtras并调用startService(intent)来启动服务。发送数据服务返回到我的活动

该服务根据附加信息计算一些东西,然后我想将结果发送回活动。

我可以通过哪种方式来做到这一点?

我试图在我的服务上创建一个意图,并使用sendBroadcast()进行广播。我有一个广播接收器的活动,但我不知道如果我注册它正确。我很困惑!

有没有其他方法可以做到这一点?像StartActivityForResult,但对于服务(像StartServiceForResult或东西)?

+0

请用您使用的技术标记您的问题。 – 2011-01-27 23:25:23

回答

0

你可以做这三件事我知道:

  1. 您可以创建一个Intent,并把数据意向并启动活动-----坏主意
  2. 您可以使用SharedPreferences传递值 - 仅用于原始值
  3. 您可以使用静态变量------我认为这是从服务传递的最佳方式。

注意: 如果你有大量的数据,你也可以使用DB。

5

您尝试使用的方法很好!虽然没有代码,但很难说你可能做错了什么。

在你的服务,你会播出这样的意图......

/** 
* Send broadcast to the activity letting it know the service is active 
* 
* @param pActivate 
*/ 
private final void sendServiceActiveBroadcast(final boolean pActivate) { 
    final Intent _intent = new Intent(); 
    _intent.setAction("com.yourtld.android.SERVICE_BROADCAST"); 
    _intent.addCategory("com.yourtld.android.CATEGORY"); 
    _intent.putExtra("isactive", pActivate); 

    this.sendBroadcast(_intent); 
} 

然后在你的活动,你可以有类似...

创建一个动作字符串:

private static final String SERVICE_BROADCAST_ACTION = "com.yourtld.android.SERVICE_BROADCAST"; 

在您的onResume()方法中,您将拥有...

final IntentFilter serviceActiveFilter = new IntentFilter(SERVICE_BROADCAST_ACTION); 

serviceActiveFilter.addCategory("com.yourtld.android.CATEGORY"); 

this.serviceReceiver = new BroadcastReceiver() { 

    @Override 
    public void onReceive(final Context context, final Intent intent) { 
     if(intent != null) { 
      if(intent.getBooleanExtra("isactive", false)) { 
       // The service is active 
      } else { 
       // False... 
      } 
     } 
    } 
}; 
this.registerReceiver(this.serviceReceiver, serviceActiveFilter); 

希望有帮助

0

首先,您可以让服务直接将意图发送给活动。这样,即使活动目前没有运行,它也会启动。

其次,您从FLAG_ACTIVITY_SINGLE_TOP开始活动。这可以防止活动在已经运行的情况下启动。

第三,在您的活动中实施onNewIntent()以捕获服务在您的活动已在运行时发送的任何意图。

相关问题