마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

MainActivity 에서 서비스를 start 하고 다른 엑티비티를 띄워서 서비스를 연결하고 싶습니다.

0 추천
안녕하세요?

제가 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

{?????}
귤님 (120 포인트) 님이 2015년 7월 8일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...