서비스에 바인드하려고 시도중입니다.
메인액티비티에서 서비스에 바인드 후 서비스 내의 메서드를 호출하려는데
서비스와 바인드하기 위해 정의한 서비스 객체가 null로 잡힙니다.
아래는 코드입니다.
public class MainActivity extends AppCompatActivity{
DataService mService;
int k = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent is = new Intent(this, DataService.class);
bindService(is,conn,Context.BIND_AUTO_CREATE);
Toast.makeText(this, "서버와 연결중입니다.",Toast.LENGTH_SHORT).show();
}
//성공시 1 실패 2
@Override
protected void onStart() {
super.onStart();
}
ServiceConnection conn = new ServiceConnection() {
public void onServiceConnected(ComponentName name,IBinder service) {
DataService.MBinder mb = (DataService.MBinder) service;
mService = mb.getService();
}
public void onServiceDisconnected(ComponentName name) {
// 서비스와 연결이 끊겼을 때 호출되는 메서드
Toast.makeText(getApplicationContext(),
"서비스 연결 해제",Toast.LENGTH_LONG).show();
}};}
여기까지가 메인 액티비티입니다. 아래는 서비스입니다.
public class DataService extends Service {
static ChkData checker;
static int LoginChecker = 0;
static boolean socketChecker = false;
static int signinChecker = 0;
IBinder mBinder = new MBinder();
public class MBinder extends Binder {
DataService getService() {
return DataService.this;
} }
@Override
public IBinder onBind(Intent intent) {
// Service 객체와 (화면단 Activity 사이에서)
// 통신(데이터를 주고받을) 때 사용하는 메서드
// 데이터를 전달할 필요가 없으면 return null;
return mBinder;
}
호출하는 메서드는 서비스에 정의된 메서드로, 매개변수를 메인액티비티에서 참조할 계획입니다.
디버그하여 자세히 보니 바인드 서비스 메서드가 호출된 후에도
메인액티비티의 mService가 null이더군요...
고수님들의 지식을 빌려보고싶습니다!
아 혹시나 해서 적습니다. 메니페스트에도 이렇게 추가해두었어요.
<service android:name=".DataService" />