从服务向活动发送简单消息 [英] Sending a simple message from Service to Activity

查看:73
本文介绍了从服务向活动发送简单消息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图找到一种方法,可以将服务中的整数值发送到MainActivity,但是我无法通过Internet上的教程弄清楚.我正在使用处理程序来接收从服务中的线程发送的消息.

I am trying to find a way to send an integer value from my Service to my MainActivity, yet I can't figure it out with the tutorials on the internet. I am using a Handler to receive my messages which I'm sending from a Thread in my Service.

我在服务中的线程代码:

My code for the Thread in the service:

private class ServiceThread extends Thread {
    @Override
    public void run() {
        super.run();
        try{
            Log.i("Service", "TASK PERFORMED");

            int x = 0;
            for (int i = 0; i < 20; i++){
                x += (random.nextInt(20) + 20);
            }
            theInteger = x/20;
            Message msg = Message.obtain();
            msg.what = MY_RND_INT;
            msg.arg1 = theInteger;
            handler.sendMessage(msg);
        }catch(Exception e){
            e.getMessage();
        }
    }
}

我的尝试接收消息的代码:

My code for attempting to receive the message:

public Messenger mMessenger = new Messenger(new IncomingHandler());


class IncomingHandler extends Handler {
    @Override
    public void handleMessage(Message msg) {
        switch (msg.what) {
            case SimpleService.MY_RND_INT:
                rndInt.setText(msg.arg1);
                break;
            default:
                super.handleMessage(msg);
        }
    }
}

推荐答案

假设您的活动"和服务"在同一程序包中...

Assuming that your Activity and Service are in the same package...

// Supposing that your value is an integer declared somewhere as: int myInteger;
private void sendMessage() {
  // The string "my-integer" will be used to filer the intent
  Intent intent = new Intent("my-integer");
  // Adding some data
  intent.putExtra("message", myInteger);
  LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}

活动侧

@Override
public void onResume() {
  super.onResume();
  // This registers mMessageReceiver to receive messages.
  LocalBroadcastManager.getInstance(this)
                       .registerReceiver(mMessageReceiver,
                                         new IntentFilter("my-integer"));
}

// Handling the received Intents for the "my-integer" event 
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
  @Override
  public void onReceive(Context context, Intent intent) {
    // Extract data included in the Intent
    int yourInteger = intent.getIntExtra("message",-1/*default value*/);
  }
};

@Override
protected void onPause() {
  // Unregister since the activity is not visible
  LocalBroadcastManager.getInstance(this)
                       .unregisterReceiver(mMessageReceiver);
  super.onPause();
}

这篇关于从服务向活动发送简单消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆