如何使完美的Singleton能够处理蓝牙服务?

时间:2018-11-20 16:09:50

标签: android bluetooth handler android-bluetooth printers

我正在为Android移动设备创建电子账单打印应用程序。我已经成功连接了应用程序和小型蓝牙POS打印机。我也可以通过它打印帐单。

我已经为此应用程序使用了片段,并且通过主要活动生成了所有片段。

我的问题是,如果我更改片段并按打印按钮,它将要求再次连接打印机。我需要避免该过程,因为一旦用户单击上一个片段中的“打印”按钮(如果用户使用该片段进行打印,这将起作用,否则它应该在这里要求与打印机连接),他/她已经连接到打印机。 / p>

当我输入新片段,然后该片段为 handler 创建新对象时,就会出现问题,我需要将该 handler 放入 singleton 此处理程序用于通过蓝牙与打印机连接。我尝试了一些解决方案,但失败了。有什么办法可以做到这一点。请帮助我找到一个更好的解决方案。预先感谢。

这是代码- 处理程序和片段的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;
    }

0 个答案:

没有答案