我有一个创建意图的活动,使用putExtra()添加一些额外内容并调用startService(intent)来启动服务。
此服务根据附加内容计算一些内容,然后我想将结果发送回活动。
我可以这样做?
我尝试在我的服务上创建一个intent并使用sendBroadcast()进行广播。我有一个关于活动的broadcastReceiver,但我不确定我是否正确注册。我糊涂了!
还有其他方法吗?像StartActivityForResult,但服务(像StartServiceForResult或类似的东西)?
答案 0 :(得分: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 );
希望有所帮助
答案 1 :(得分:0)
你可以做我知道的这三件事:
注意: 你也可以使用DB,如果你拥有大量数据,那就很好。
答案 2 :(得分:0)
首先,您可以让服务直接将意图发送到活动。这样,即使活动当前没有运行,它也会启动。
其次,您使用onNewIntent()
开始活动。如果活动已经在运行,这将使活动无法启动。
第三,您在活动中实施c
以捕获服务在您的活动已经运行时发送的任何意图。