Android:如何告诉某个活动从服务中做某事?

时间:2012-04-28 16:39:47

标签: android sockets service android-activity extras

我有一个主要活动启动: 1.-写入套接字的易于网络的线程。 2.-应该从套接字读取的网络倾向服务。 到目前为止,我已完成1.但我希望从套接字读取的信息显示在主要活动中。我知道我可以使用附加功能在活动和服务之间传递信息,但是如何告诉活动更新并获取新数据?

2 个答案:

答案 0 :(得分:1)

我猜您可以在主要活动中使用广播意图和BroadcastReceiver,以实现后台通信。

这是一个可以实现此目的的片段。

(活动中的代码):

class MyActivity extends Activity{
    CustomEventReceiver mReceiver=new CustomEventReceiver();

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        /*YOUR ONCREATE CODE HERE*/

        /*Set up filters for broadcast receiver so that your reciver
        can only receive what you want it to receive*/
        IntentFilter filter = new IntentFilter();
        filter.addAction(CustomEventReceiver.ACTION_MSG_CUSTOM1);
        filter.addCategory(Intent.CATEGORY_DEFAULT);
        registerReceiver(mReceiver, filter);

    }

    @Override
    public void onDestroy(){
        super.onDestroy();
        /*YOUR DESTROY CODE HERE*/
        unregisterReceiver(mReceiver);
    }

    /*YOUR CURRENT ACTIVITY OTHER CODE HERE, WHATEVER IT IS*/

    public class CustomEventReceiver extends BroadcastReceiver{
        public static final String ACTION_MSG_CUSTOM1 = "yourproject.action.MSG_CUSTOM1";
        @Override
        public void onReceive(Context context, Intent intent){
            if(intent.getAction().equals(ACTION_MSG_CUSTOM1)){
                /*Fetch your extras here from the intent
                and update your activity here.
                Everything will be done in the UI thread*/

            }
        }
    }
}

然后,在你的服务中,你只需播放一个意图(带有你需要的任何额外内容)......用这样的话说:

Intent tmpIntent = new Intent();
tmpIntent.setAction(CustomEventReceiver.ACTION_MSG_CUSTOM1);
tmpIntent.setCategory(Intent.CATEGORY_DEFAULT);
/*put your extras here, with tmpIntent.putExtra(..., ...)*/
sendBroadcast(tmpIntent);

答案 1 :(得分:0)

一个选项可能是将套接字读取器的输出写入流 - 例如存储在应用程序内部存储中的文件,然后定期在活动线程中轮询该文件。