Как сделать идеальный синглтон для обслуживания Bluetooth? - PullRequest
0 голосов
/ 20 ноября 2018

Я создаю приложение для печати электронных счетов для мобильных устройств Android.Я успешно подключил приложение и небольшой принтер Bluetooth POS.Я также могу распечатать счет через это.

Я использовал фрагменты для этого приложения и все фрагменты, генерируемые в результате основной деятельности.

Мой вопрос: если я изменю фрагмент и нажму кнопку печати, он спроситснова подключиться к принтеру.Мне нужно избегать этого процесса, потому что, как только пользователь нажал кнопку печати в предыдущем фрагменте (это работает, если пользователь печатает что-то с использованием этого фрагмента, в противном случае ему следует попросить соединиться с принтером), он / она уже подключен к принтеру.

Проблема возникает здесь, когда я ввожу новый фрагмент, затем этот фрагмент создает новый объект для обработчик , мне нужно поместить этот обработчик как singleton. Этот обработчик используется для подключения к принтеру через Bluetooth .Я попробовал несколько решений, но мне не удалось.Есть какой-либо способ сделать это.Пожалуйста, помогите мне найти лучшее решение этой проблемы.Заранее спасибо.

вот код - обработчик и фрагмент onCreateView,

private final Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case BluetoothService.MESSAGE_STATE_CHANGE:
                    switch (msg.arg1) {
                        case BluetoothService.STATE_CONNECTED:   //������
                            Toast.makeText(getContext(), "Connect successful",
                                    Toast.LENGTH_SHORT).show();
                            isDeviceConnected = true;

//                            updateConnectBtn();
//                            btnClose.setEnabled(true);
//                            btnSendDraw.setEnabled(true);
                            Log.v("Pasindu", "Connected!");
                            break;
                        case BluetoothService.STATE_CONNECTING:  //��������
                            Log.d("��������", "��������.....");
                            break;
                        case BluetoothService.STATE_LISTEN:     //�������ӵĵ���
                        case BluetoothService.STATE_NONE:
                            Log.d("��������", "�ȴ�����.....");
                            break;
                    }
                    break;
                case BluetoothService.MESSAGE_CONNECTION_LOST:    //�����ѶϿ�����
                    Toast.makeText(getContext(), "Device connection was lost",
                            Toast.LENGTH_SHORT).show();
                    isDeviceConnected = false;
//                    btnClose.setEnabled(false);
//                    btnSendDraw.setEnabled(false);
                    break;
                case BluetoothService.MESSAGE_UNABLE_CONNECT:     //�޷������豸
                    Toast.makeText(getContext(), "Unable to connect device",
                            Toast.LENGTH_SHORT).show();
                    break;
            }
        }

    }; 


 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.data_fragment, container, false);
        btn_proceed = (Button) view.findViewById(R.id.btn_proceed);
        mService = new BluetoothService(getContext(), mHandler);
        cmd = new byte[3];
        isDeviceConnected = ((MainActivity)this.getActivity()).isDeviceConnected;

        btn_proceed.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                print();
            }
        });
        return view;
    }
...