Send Data from Service To Activity Android

后端 未结 1 1974
萌比男神i
萌比男神i 2020-12-05 15:59

I am building a music player that uses a service for playback. I have an Activity UI that controls (play, pause, next, ...) the service. I want to update the UI from my ser

1条回答
  •  攒了一身酷
    2020-12-05 16:34

    Sample code hope will help others

    1. Set Handler (to receive message) and Messenger (to communicate) MainActivity.java

    Messenger msgService;
    boolean isBound;
    
    ServiceConnection connection = new ServiceConnection() {
    
        @Override
        public void onServiceDisconnected(ComponentName name) { isBound = false; }
    
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            isBound = true;
            msgService = new Messenger(service);
        }
    };
    
    public void sendMessage(View view) {
        if (isBound) {
            try {
                Message message = Message.obtain(null, MessangerService.MESSAGE, 1, 1);
                message.replyTo = replyMessenger;
    
                Bundle bundle = new Bundle();
                bundle.putString("rec", "Hi, you hear me");
                message.setData(bundle);
    
                msgService.send(message); //sending message to service
    
            } catch (RemoteException e) {
                e.printStackTrace();
            }
        }
    }
    //setting reply messenger and handler
    Messenger replyMessenger = new Messenger(new HandlerReplyMsg());
    
    class HandlerReplyMsg extends Handler {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            String recdMessage = msg.obj.toString(); //msg received from service
            toast(recdMessage);
        }
    }
    

    2. Setup service class MessengerService.java

    Messenger replyMessanger;
    final static int MESSAGE = 1;
    
    class IncomingHandler extends Handler {
    
        @Override
        public void handleMessage(Message msg) {
    
            if (msg.what == MESSAGE) {
                Bundle bundle = msg.getData();
                toast(bundle.getString("rec"));//message received
                replyMessanger = msg.replyTo; //init reply messenger
                doSomething();
            }
        }
    }
    
    private void doSomething() {
        // do stuff
    
        if (replyMessanger != null)
            try {
                Message message = new Message();
                message.obj = "Yes loud and clear";
                replyMessanger.send(message);//replying / sending msg to activity
            } catch (RemoteException e) {
                e.printStackTrace();
            }
    }
    Messenger messenger = new Messenger(new IncomingHandler());
    
    @Override
    public IBinder onBind(Intent intent) {
        return messenger.getBinder();
    }
    

    Make sure you declared Service in manifest and binding/unbinding Service in activity.

    0 讨论(0)
提交回复
热议问题