android 蓝牙可以搜索到蓝牙打印机吗 可以发送AT指令控制打印机打印东西吗 最好是串口的 

解决方案 »

  1.   

    1.5/1.6仅实现了headset的profile,打印都做不到,2.0不知道是否可以。
    如果你自己要在1.5/1.6上做的话,只能在其源代码树上进一步开发必要的profile。
    可以看看源代码树中的 frameworks/base/core/java/android/bluetooth/ 下面的东西。
    仿照其中的 a2dp 做一个profile即可,或者干脆直接用其提供的rfcomm自己做
      

  2.   

    这两天大致研究了一下Android  1.5/1.6的蓝牙功能。要读懂下列信息,需要了解ndk, jni, 协议栈等基本概念。
    1. 在linux这一层,Android使用了bluez这个开源蓝牙协议栈。其中包括底层的sdp协议、rfcomm协议等。当然也包括其它一些子协议。代码在/external/bluez中。
    2. Android在其源代码树上实现了Headset和A2dp两个profile。其中A2dp是利用了bluez里面的a2dp实现的,而Headset则是直接在rfcommsocket的基础上自己写,而不是直接利用bluez中的Headset profile。不明白为啥这么干,难道android开发团队是为了给我们介绍蓝牙profile在android中的两种实现方法?看起来似乎是多此一举,但是,这对于开发蓝牙打印功能则是一个好消息!
    3. Bluetooth支持蓝牙打印功能,其对应的profile是BPP(即Basic Printing Profile)。需要自行在Android中实现该profile! 
    4. 一个更加不幸的消息是, 根据BPP协议栈的层次,BPP需要OBEX profile的支持,而Android中没有实现OBEX profile!
    5. 因此,解决方案如下:
    i. 到http://bluetooth.com/Bluetooth/Technology/Works/Profiles_Overview.htm 下载 OBEX与BPP的profile文档;
    ii. 下载Android 1.5/1.6源代码
    iii.在源代码树上,仿照Android中的Headset实现 OBEX的profile
    iv. 实现BPP的profile
      

  3.   

    我用的打印机是MTP400的 根本不用bpp和obex协议啊
      

  4.   

    droid手机 通过蓝牙怎么和蓝牙打印机建立连接啊 !
    package com.ea.test;import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.UUID;
    import android.app.Activity;
    import android.bluetooth.BluetoothAdapter;
    import android.bluetooth.BluetoothDevice;
    import android.bluetooth.BluetoothServerSocket;
    import android.bluetooth.BluetoothSocket;
    import android.content.Intent;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;public class Bluetooth_one extends Activity {
    // Debugging
        private static final String TAG = "BluetoothChatService";
        private static final boolean D = true;
    protected static final int REQUEST_ENABLE_BT = 0;
    private Button open = null;
    private Button find = null;
    private Button conn = null;
    private Button trans = null;
    private BluetoothAdapter mBluetoothAdapter=null;
     private int mState;     // Constants that indicate the current connection state
        public static final int STATE_NONE = 0;       // we're doing nothing
        public static final int STATE_LISTEN = 1;     // now listening for incoming connections
        public static final int STATE_CONNECTING = 2; // now initiating an outgoing connection
        public static final int STATE_CONNECTED = 3;  // now connected to a remote device
    // Unique UUID for this application
        private static final UUID MY_UUID = UUID.fromString("fa87c0d0-afac-11de-8a39-0800200c9a66");
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    open = (Button) findViewById(R.id.open);
    find = (Button) findViewById(R.id.find);
    conn = (Button) findViewById(R.id.conn);
    trans = (Button) findViewById(R.id.trans);
    addLisenner();
    } public void addLisenner() {
    open.setOnClickListener(new OnClickListener() { @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
     mBluetoothAdapter = BluetoothAdapter
    .getDefaultAdapter();
    if (mBluetoothAdapter == null) {
    // Device does not support Bluetooth
    showDialog(R.string.no_support);
    } else {
    if (!mBluetoothAdapter.isEnabled()) {
    Intent enableBtIntent = new Intent(
    BluetoothAdapter.ACTION_REQUEST_ENABLE);
    startActivityForResult(enableBtIntent,
    REQUEST_ENABLE_BT);
    }else{

    }
    }
    }
    });
    find.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
    // TODO Auto-generated method stub
    new AcceptThread().start();
    }
    });
    conn.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
    BluetoothDevice device=mBluetoothAdapter.getRemoteDevice("00:80:37:21:18:81");
    new ConnectThread(device).start();
    }
    });

    }
      /**
         * This thread runs while listening for incoming connections. It behaves
         * like a server-side client. It runs until a connection is accepted
         * (or until cancelled).
         */
        private class AcceptThread extends Thread {
            // The local server socket
            private final BluetoothServerSocket mmServerSocket;        public AcceptThread() {
                BluetoothServerSocket tmp = null;            // Create a new listening server socket
                try {
                    tmp = mBluetoothAdapter.listenUsingRfcommWithServiceRecord("ddd", MY_UUID);
                } catch (IOException e) {
                    Log.e(TAG, "listen() failed", e);
                }
                mmServerSocket = tmp;
            }        public void run() {
                if (D) Log.d(TAG, "BEGIN mAcceptThread" + this);
                setName("AcceptThread");
                BluetoothSocket socket = null;            // Listen to the server socket if we're not connected
                while (mState != STATE_CONNECTED) {
                    try {
                        // This is a blocking call and will only return on a
                        // successful connection or an exception
                        socket = mmServerSocket.accept();
                    } catch (IOException e) {
                        Log.e(TAG, "accept() failed", e);
                        break;
                    }                // If a connection was accepted
                    if (socket != null) {
                        synchronized (Bluetooth_one.this) {
                            switch (mState) {
                            case STATE_LISTEN:
                            case STATE_CONNECTING:
                                // Situation normal. Start the connected thread.
                             //   connected(socket, socket.getRemoteDevice());
                                break;
                            case STATE_NONE:
                            case STATE_CONNECTED:
                                // Either not ready or already connected. Terminate new socket.
                                try {
                                    socket.close();
                                } catch (IOException e) {
                                    Log.e(TAG, "Could not close unwanted socket", e);
                                }
                                break;
                            }
                        }
                    }
                }
                if (D) Log.i(TAG, "END mAcceptThread");
            }        public void cancel() {
                if (D) Log.d(TAG, "cancel " + this);
                try {
                    mmServerSocket.close();
                } catch (IOException e) {
                    Log.e(TAG, "close() of server failed", e);
                }
            }
        }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
    if (REQUEST_ENABLE_BT == requestCode) {
    if (resultCode == RESULT_OK) {
    // user open bluetooth
    // mBluetoothAdapter.startDiscovery();
    } else {
    // user not open bluetooth
    }
    }
    }

    private class ConnectedThread extends Thread {
        private final BluetoothSocket mmSocket;
        private final InputStream mmInStream;
        private final OutputStream mmOutStream;     public ConnectedThread(BluetoothSocket socket) {
            mmSocket = socket;
            InputStream tmpIn = null;
            OutputStream tmpOut = null;         // Get the input and output streams, using temp objects because
            // member streams are final
            try {
                tmpIn = socket.getInputStream();
                tmpOut = socket.getOutputStream();
            } catch (IOException e) { }         mmInStream = tmpIn;
            mmOutStream = tmpOut;
        }     public void run() {
            byte[] buffer = new byte[1024];  // buffer store for the stream
            int bytes; // bytes returned from read()         // Keep listening to the InputStream until an exception occurs
            while (true) {
                try {
                    // Read from the InputStream
                    bytes = mmInStream.read(buffer);
                    // Send the obtained bytes to the UI Activity
                  //  mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer) .sendToTarget();
                } catch (IOException e) {
                    break;
                }
            }
        }     /* Call this from the main Activity to send data to the remote device */
        public void write(byte[] bytes) {
            try {
                mmOutStream.write(bytes);
            } catch (IOException e) { }
        }     /* Call this from the main Activity to shutdown the connection */
        public void cancel() {
            try {
                mmSocket.close();
            } catch (IOException e) { }
        }
    }

    private class ConnectThread extends Thread {
        private final BluetoothSocket mmSocket;
        private final BluetoothDevice mmDevice;     public ConnectThread(BluetoothDevice device) {
            // Use a temporary object that is later assigned to mmSocket,
            // because mmSocket is final
            BluetoothSocket tmp = null;
            mmDevice = device;         // Get a BluetoothSocket to connect with the given BluetoothDevice
            try {
                // MY_UUID is the app's UUID string, also used by the server code
                tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
            } catch (IOException e) {
             e.printStackTrace();
            }
            mmSocket = tmp;
        }     public void run() {
            // Cancel discovery because it will slow down the connection
          //  mAdapter.cancelDiscovery();         try {
                // Connect the device through the socket. This will block
                // until it succeeds or throws an exception
            
                mmSocket.connect();
            } catch (IOException connectException) {
                // Unable to connect; close the socket and get out
             connectException.printStackTrace();
                try {
                    mmSocket.close();
                } catch (IOException closeException) { }
                return;
            }         // Do work to manage the connection (in a separate thread)
           // manageConnectedSocket(mmSocket);
        }     /** Will cancel an in-progress connection, and close the socket */
        public void cancel() {
            try {
                mmSocket.close();
            } catch (IOException e) { }
        }
    }
    }
      

  5.   

    哪位知道android2.0是否实现了ftp的profile
      

  6.   

    请问怎么建立headset连接呢?着急死死的了
      

  7.   

    可不可以发一个打印的源码给我谢谢
    [email protected]
      

  8.   

    可不可以发一个打印的源码给我谢谢
    [email protected]
      

  9.   

    可不可以发一个打印的源码给我谢谢
    [email protected]
      

  10.   

    可不可以发一个打印的源码给我谢谢
    [email protected]
      

  11.   

    可不可以发一个打印的源码给我谢谢
    [email protected]
      

  12.   

    正在研究这个就,能够发一个打印的源代码给我,非常感谢 ! [email protected]
      

  13.   

    正在研究这个问题,能够发一个打印的源代码给我吗?行得话,非常感谢 ! [email protected]
      

  14.   

    正在研究这个,能否发一份源码, 谢谢
    [email protected]
      

  15.   

    可以发个打印的源码给我吗?很急需哦 。。[email protected]
      

  16.   

    求打印的源码,天哪,救命啊[email protected],拜谢各位神仙
      

  17.   

    我还是想要 [email protected],先谢谢了
      

  18.   

    求源码,[email protected] ,谢谢!!!!
      

  19.   

    求源码,[email protected] ,谢谢!!!!
      

  20.   

    求源码,[email protected] ,谢谢!!!!