서비스에서 다른 Activity(.java) 안의 method 호출 (브로드 캐스트)

java > 서비스로 작동하는 .java 파일을 열어서 아래 코드를 상단에 넣어 임포트 시켜준다.

import android.content.Intent;
import android.support.v4.content.LocalBroadcastManager;

그리고 public class MyService extends Service{ 이렇게 보이는 서비스 클래스 안에 아래 코드를 넣어준다.

//브로드 캐스트 보내기
private void sendMessage() {
      Intent intent = new Intent("naminsik");
      intent.putExtra("message", "전달하고자 하는 데이터");
      LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}

위에 보면 "naminsik" 은 통로 같은 역할을 한다고 보면 된다.   이제 받는 쪽에다 저 통로를 맞춰서 데이터를 받으면 된다.

 

이제 다른 Activity(.java)에 서비스로 부터 신호를 받는 역할을 만들자.

java > MainActivity.java 와 같이 호출할 메소드가 있는 Activity를 열어 상단에 아래 코드를 넣어 임포트 시켜준다.

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;

그리고 public class SubActivity extends AppCompatActivity{ 이렇게 보이는 클래스 안에 아래 아래 코드를 넣어준다.

@Override
public void onResume() {
      super.onResume();
      LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
      new IntentFilter("naminsik"));
}

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
      @Override
      public void onReceive(Context context, Intent intent) {
            String message = intent.getStringExtra("message");
            //CallYourMethod(message); 실행시킬 메소드를 전달 받은 데이터를 담아 호출하려면 이렇게 한다.
      }
};

@Override
protected void onPause() {
      LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
      super.onPause();
}

 

Subscribe
Notify of
guest

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.

3 댓글
Oldest
Newest
Inline Feedbacks
View all comments
ANT All Ncs Test
ANT All Ncs Test
3 years ago

안녕하세요 좋은 정보 너무나 감사합니다.

//CallYourMethod(message); 실행시킬 메소드를 전달 받은 데이터를 담아 호출하려면 이렇게 한다.

여기 부분에 어떻게 메소드를 넣어주면 될까요?comment image

naminsik
naminsik
3 years ago

안녕하세요. 위에 만드신 코드로 보면
sendmassage_loop(); 이 부분을 그 아래 코드와 순서를 바꿔서
---------아래처럼 수정하시면 됩니다.
String message = intent.getStringExtra("message");
sendmassage_loop(message);

그리고 밑에 받는 쪽에
public void sendmassage_loop() 부분을

public void sendmassage_loop(abc)
로 바꾸면 abc가 위에 전달시킨 message의 값이 들어옵니다.

ANT All Ncs Test
ANT All Ncs Test
3 years ago
Reply to  naminsik

답변 정말 너무 감사드립니다.

Mainactivity에서
comment image

일단 이렇게 했고,

Service화면에서
comment image

이렇게 했는데 Mainactivity에서 함수가 호출되어서 5초마다 실행하려고 하는 것인데

함수 호출이 안되는데 이게 맞는 것일까요?

정말 사례드리고 싶네요 너무 감사합니다. ㅠㅠ

TOP