将服务中的数据发送回我的活动

use*_*492 4 service android communication android-intent android-activity

我有一个创建意图的活动,使用putExtra()添加一些额外内容并调用startService(intent)来启动服务.

此服务根据额外内容计算一些内容,然后我想将结果发送回活动.

我可以这样做?

我尝试在我的服务上创建一个intent并使用sendBroadcast()进行广播.我有一个关于活动的broadcastReceiver,但我不确定我是否正确注册.我糊涂了!

有没有其他方法可以这样做?像StartActivityForResult,但对于服务(像StartServiceForResult或类似的东西)?

rf4*_*f43 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 );
}
Run Code Online (Sandbox Code Playgroud)

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

创建一个动作字符串:

private static final String SERVICE_BROADCAST_ACTION = "com.yourtld.android.SERVICE_BROADCAST";
Run Code Online (Sandbox Code Playgroud)

在你的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 );
Run Code Online (Sandbox Code Playgroud)

希望有所帮助