7

私は1つのアプリを実装しています。

私の要件に基づいて、ゼブラ mz320 プリンターからモバイル Bluetooth 経由で印刷したいと考えています。

mobile bluetoothからまでのペアを作ろうとしていますprinter bluetoth.

ペアリングしようとすると、「接続するには 1234 または 0000 PIN を入力してください。

同じ PIN を入力しました。

しかし、プリンターがモバイル デバイスとペアリングされていません。

次のような例外をスローしますcom.zebra.android.comm.ZebraPrinterConnectionException: Could not connect to printer: Unable to start Service Discovery

誰かが解決策を知っているなら、私を助けてください。
前もって感謝します。

4

1 に答える 1

1

UUID リストはこちらを参照してください。接続を確立するには、キュー内のこのスニペットの 1 つまたはすべてを試す必要があります。

@TargetApi(10) プライベート BluetoothSocket connectDeviceUsingAPI10() は IOException をスローします {

BluetoothSocket socket = null;
IOException ioex = null;
int port = 1; // may be from 1 to 14 if I'm not confused
UUID SPP_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
      
// way #0. Connect using workaround for Android < 2.3
try {
     if (!isThreadActive)
      return null;
     Log.d("Try via API10: createInsecureRfcommSocketToServiceRecord");
     socket = mDevice.createInsecureRfcommSocketToServiceRecord(SPP_UUID); // or RFCOMM_UUID);
     } catch (IOException e) { ioex = e; }
      if (socket != null && ioex == null) {
          try {
              socket.connect();
              setStreams(socket.getOutputStream(), socket.getInputStream());
          } catch (IOException ex) {
              ioex = ex;
              try {
                  socket.close();
              } catch (IOException e) {
              } finally {
                  socket = null;
              }
          }
      }
      if (socket != null && ioex == null) {
          return socket;

      }

      ioex = null;
      socket = null;
      // way #1. Using standard secure connection procedure via UUID
      try {
          if (!isThreadActive)
              return null;
          Log.d("Try via API10: createRfcommSocketToServiceRecord");
          socket = mDevice
                  .createRfcommSocketToServiceRecord(SPP_UUID);// or RFCOMM_UUID
      } catch (IOException e) {
          ioex = e;
      }
      if (socket != null && ioex == null) {
          try {
              socket.connect();
              setStreams(socket.getOutputStream(), socket.getInputStream());
          } catch (IOException ex) {
              ioex = ex;
              try {
                  socket.close();
              } catch (IOException e) {
              } finally {
                  socket = null;
              }
          }
      }
      if (socket != null && ioex == null) {
          return socket;
      }

      // way #2. Using hidden api procedure with insecure socket
      socket = null;
      ioex = null;
      // Try to fallback to API5 method
      try {
          if (!isThreadActive)
              return null;
          Log.d("Try via API10: createInsecureRfcommSocket");
          Method m = mDevice.getClass().getMethod(
                  "createInsecureRfcommSocket", new Class[] { int.class });
          socket = (BluetoothSocket) m.invoke(mDevice, Integer.valueOf(port));
      } catch (IOException e) { // ... }
      if (socket != null && ioex == null) {
          try {
              socket.connect();
              setStreams(socket.getOutputStream(), socket.getInputStream());
          } catch (IOException ex) {
              ioex = ex;
              try {
                  socket.close();
              } catch (IOException e) {
              } finally {
                  socket = null;
              }
          }
      }

      if (socket != null && ioex == null) {
          return socket;
      }

      ioex = null;
      socket = null;
      // way #3. Connect using workaround for Android < 2.3
      try {
          if (!isThreadActive)
              return null;
          Log.d("Try via API10: createRfcommSocket");
          Method m = mDevice.getClass().getMethod("createRfcommSocket",
                  new Class[] { int.class });
          socket = (BluetoothSocket) m.invoke(mDevice, Integer.valueOf(port));
      } catch (IOException e) {
              ioex = e;
      }
      if (socket != null && ioex == null) {
          try {
              socket.connect();
              setStreams(socket.getOutputStream(), socket.getInputStream());
          } catch (IOException ex) {
              ioex = ex;
              try {
                  socket.close();
              } catch (IOException e) {
              } finally {
                  socket = null;
              }
          }
      }
      if (socket != null && ioex == null) {
          return socket;
      }
      return socket;
  }
于 2014-03-14T22:53:37.913 に答える