안녕하세요?
제가 MainActivity (앱을 실행하면 처음 나오는 액티비티)에서 서비스를 start 한 다음 거기에 버튼을 달아서 버튼을 누르면 다른 엑티비티를 띄워서, Mainactivity가 아닌 새로 띄운 액티비티에서 서비스를 연결해서 작업을 하고 싶습니다.
그런데 서비스 연결하고 해제하는 부분이 난해하여 애를 먹고 있습니다.
새로 띄운 NewActivity.java 에 어떻게 서비스를 연결하는 부분의 코드를 작성해야 하는지 잘 모르겠는데요.
서비스 연결하는 부분의 코드를 좀 적어주실수 있을까요??
아래는 코드입니다
//** MainActivity.java
boolean isbound = false;
private Context mContext;
private BTCTemplateService mService;
private ActivityHandler mActivityHandler;
mService.setupService(mActivityHandler);
private Timer mRefreshTimer = null;
private void doStartService() {
Log.d(TAG, "# Activity - doStartService()");
startService(new Intent(this, BTCTemplateService.class));
bindService(new Intent(this, BTCTemplateService.class), mServiceConn, Context.BIND_AUTO_CREATE);
}
/**
* Service connection
*/
private ServiceConnection mServiceConn = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder binder) {
Log.d(TAG, "Activity - Service connected");
mService = ((BTCTemplateService.ServiceBinder) binder).getService();
isbound = true;
initialize();
}
public void onServiceDisconnected(ComponentName className) {
mService = null;
isbound = false;
}
};
private void doStopService() {
Log.d(TAG, "# Activity - doStopService()");
// mService.stopSelf();
if (isbound == true) {
unbindService(mServiceConn);
mServiceConn = null;
isbound = false;
}
mService.finalizeService();
stopService(new Intent(this, BTCTemplateService.class));
}
@Override
public void onStop() {
// Stop the timer
if (mRefreshTimer != null) {
mRefreshTimer.cancel();
mRefreshTimer = null;
}
super.onStop();
}
@Override
public void onDestroy() {
super.onDestroy();
finalizeActivity();
}
/**
* Initialization / Finalization
*/
private void initialize() {
Logs.d(TAG, "# Activity - initialize()");
// Use this check to determine whether BLE is supported on the device. Then
// you can selectively disable BLE-related features.
if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
Toast.makeText(this, R.string.bt_ble_not_supported, Toast.LENGTH_SHORT).show();
finish();
}
mService.setupService(mActivityHandler);
// Load activity reports and display
if (mRefreshTimer != null) {
mRefreshTimer.cancel();
}
// Use below timer if you want scheduled job
//mRefreshTimer = new Timer();
//mRefreshTimer.schedule(new RefreshTimerTask(), 5*1000);
}
private void finalizeActivity() {
Logs.d(TAG, "# Activity - finalizeActivity()");
if (!AppSettings.getBgService()) {
doStopService();
} else {
}
ServiceMonitoring.stopMonitoring(mContext);
// Clean used resources
RecycleUtils.recursiveRecycle(getWindow().getDecorView());
System.gc();
}
public class ActivityHandler extends Handler {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
// Receives BT state messages from service
// and updates BT state UI
case Constants.MESSAGE_BT_STATE_INITIALIZED:
mTextStatus.setText(getResources().getString(R.string.bt_title) + ": " +
getResources().getString(R.string.bt_state_init));
mImageBT.setImageDrawable(getResources().getDrawable(android.R.drawable.presence_invisible));
break;
case Constants.MESSAGE_BT_STATE_LISTENING:
mTextStatus.setText(getResources().getString(R.string.bt_title) + ": " +
getResources().getString(R.string.bt_state_wait));
mImageBT.setImageDrawable(getResources().getDrawable(android.R.drawable.presence_invisible));
break;
case Constants.MESSAGE_BT_STATE_CONNECTING:
mTextStatus.setText(getResources().getString(R.string.bt_title) + ": " +
getResources().getString(R.string.bt_state_connect));
mImageBT.setImageDrawable(getResources().getDrawable(android.R.drawable.presence_away));
break;
case Constants.MESSAGE_BT_STATE_CONNECTED:
if (mService != null) {
String deviceName = mService.getDeviceName();
if (deviceName != null) {
mTextStatus.setText(getResources().getString(R.string.bt_title) + ": " +
getResources().getString(R.string.bt_state_connected) + " " + deviceName);
mImageBT.setImageDrawable(getResources().getDrawable(android.R.drawable.presence_online));
} else {
mTextStatus.setText(getResources().getString(R.string.bt_title) + ": " +
getResources().getString(R.string.bt_state_connected) + " no name");
mImageBT.setImageDrawable(getResources().getDrawable(android.R.drawable.presence_online));
}
}
break;
case Constants.MESSAGE_BT_STATE_ERROR:
mTextStatus.setText(getResources().getString(R.string.bt_state_error));
mImageBT.setImageDrawable(getResources().getDrawable(android.R.drawable.presence_busy));
break;
// BT Command status
case Constants.MESSAGE_CMD_ERROR_NOT_CONNECTED:
mTextStatus.setText(getResources().getString(R.string.bt_cmd_sending_error));
mImageBT.setImageDrawable(getResources().getDrawable(android.R.drawable.presence_busy));
break;
///////////////////////////////////////////////
// When there's incoming packets on bluetooth
// do the UI works like below
///////////////////////////////////////////////
case Constants.MESSAGE_READ_CHAT_DATA:
Log.d("MESSAGE_READ_CHAT_DATA", "t");
if (msg.obj != null) {
Log.d("MESSAGE_READ_CHAT_DATA", "not null");
Log.d("MESSAGE_READ_CHAT_DATA", msg.obj.toString());
ExampleFragment frg = (ExampleFragment) mSectionsPagerAdapter.getItem(FragmentAdapter.FRAGMENT_POS_EXAMPLE);
// frg.showMessage((String)msg.obj);
}
break;
default:
break;
}
super.handleMessage(msg);
}
} // End of class ActivityHandler
/**
* Auto-refresh Timer
*/
private class RefreshTimerTask extends TimerTask {
public RefreshTimerTask() {
}
public void run() {
mActivityHandler.post(new Runnable() {
public void run() {
// TODO:
mRefreshTimer = null;
}
});
}
}
//** NewActivity.java
{?????}