How to connect with paired Bluetooth device programmatic in Android?

后端 未结 1 515
隐瞒了意图╮
隐瞒了意图╮ 2020-12-13 11:31

I am developing an application where I have to connect to Bluetooth paired device. These two devices are paired with each other. Now when I try to connect with paired device

相关标签:
1条回答
  • 2020-12-13 12:19

    Please modify your Main.java file like below and please keep the rest files at it is.

    Main.java

    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.Random;
    import java.util.Set;
    import java.util.TimeZone;
    import java.util.UUID;
    
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.app.Dialog;
    import android.app.ProgressDialog;
    import android.bluetooth.BluetoothAdapter;
    import android.bluetooth.BluetoothDevice;
    import android.bluetooth.BluetoothSocket;
    import android.content.Context;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.content.res.Configuration;
    import android.graphics.Bitmap;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.ColorMatrix;
    import android.graphics.ColorMatrixColorFilter;
    import android.graphics.PorterDuff.Mode;
    import android.graphics.drawable.BitmapDrawable;
    import android.graphics.drawable.Drawable;
    import android.os.Bundle;
    import android.os.Environment;
    import android.os.Handler;
    import android.os.Message;
    import android.preference.PreferenceManager;
    import android.provider.Settings;
    import android.util.Log;
    import android.view.KeyEvent;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.View.OnTouchListener;
    import android.view.Window;
    import android.view.WindowManager;
    import android.view.inputmethod.InputMethodManager;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ImageView;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class Main extends Activity implements Runnable 
    {
        protected static final String TAG = "TAG";
        private static final int REQUEST_CONNECT_DEVICE = 1;
        private static final int REQUEST_ENABLE_BT = 2;
        Button mScan;
        BluetoothAdapter mBluetoothAdapter;
        private UUID applicationUUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
        private ProgressDialog mBluetoothConnectProgressDialog;
        private BluetoothSocket mBluetoothSocket;
        BluetoothDevice mBluetoothDevice;
    
        @Override
        public void onCreate(Bundle mSavedInstanceState) 
        {
            super.onCreate(mSavedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
            setContentView(R.layout.main);
            mScan = (Button) findViewById(R.id.Scan);
            mScan.setOnClickListener(new View.OnClickListener() 
            {
                public void onClick(View mView) 
                {
                    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
                    if (mBluetoothAdapter == null) 
                    {
                        Toast.makeText(Main.this, "Message1", 2000).show();
                    } 
                    else 
                    {
                        if (!mBluetoothAdapter.isEnabled()) 
                        {
                            Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                            startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
                        } 
                        else 
                        {
                            ListPairedDevices();
                            Intent connectIntent = new Intent(Main.this, DeviceListActivity.class);
                            startActivityForResult(connectIntent, REQUEST_CONNECT_DEVICE);
                        }
                    }
                }
            });
    
            mTune.setOnClickListener(new View.OnClickListener() 
            {
                public void onClick(View mView) 
                {
                    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
                    if (mBluetoothAdapter == null) 
                    {
                        Toast.makeText(Main.this, "Message2", 2000).show();
                    } 
                    else 
                    {
                        if (!mBluetoothAdapter.isEnabled()) 
                        {
                            Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                            startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
                        } 
                        else 
                        {
                            ListPairedDevices();
                            Intent connectIntent = new Intent(Main.this, DeviceListActivity.class);
                            startActivityForResult(connectIntent, REQUEST_CONNECT_DEVICE);
                        }
                    }
                }
            });
        }// onCreate
    
        public void onActivityResult(int mRequestCode, int mResultCode, Intent mDataIntent) 
        {
            super.onActivityResult(mRequestCode, mResultCode, mDataIntent);
    
            switch (mRequestCode) 
            {
                case REQUEST_CONNECT_DEVICE:
                    if (mResultCode == Activity.RESULT_OK) 
                    {
                        Bundle mExtra = mDataIntent.getExtras();
                        String mDeviceAddress = mExtra.getString("DeviceAddress");
                        Log.v(TAG, "Coming incoming address " + mDeviceAddress);
                        mBluetoothDevice = mBluetoothAdapter.getRemoteDevice(mDeviceAddress);
                        mBluetoothConnectProgressDialog = ProgressDialog.show(this, "Connecting...", mBluetoothDevice.getName() + " : " + mBluetoothDevice.getAddress(), true, false);
                        Thread mBlutoothConnectThread = new Thread(this);
                        mBlutoothConnectThread.start();
                        //pairToDevice(mBluetoothDevice); This method is replaced by progress dialog with thread
                    }
                    break;
    
                case REQUEST_ENABLE_BT:
                    if (mResultCode == Activity.RESULT_OK) 
                    {
                        ListPairedDevices();
                        Intent connectIntent = new Intent(Main.this, DeviceListActivity.class);
                        startActivityForResult(connectIntent, REQUEST_CONNECT_DEVICE);
                    } 
                    else 
                    {
                        Toast.makeText(Main.this, "Message", 2000).show();
                    }
                    break;
            }
        }
    
        private void ListPairedDevices() 
        {
            Set<BluetoothDevice> mPairedDevices = mBluetoothAdapter.getBondedDevices();
            if (mPairedDevices.size() > 0) 
            {
                for (BluetoothDevice mDevice : mPairedDevices) 
                {
                    Log.v(TAG, "PairedDevices: " + mDevice.getName() + " " + mDevice.getAddress());
                }
            }
        }
    
        public void run() 
        {
            try 
            {
                mBluetoothSocket = mBluetoothDevice.createRfcommSocketToServiceRecord(applicationUUID);
                mBluetoothAdapter.cancelDiscovery();
                mBluetoothSocket.connect();
                mHandler.sendEmptyMessage(0);
            }
            catch (IOException eConnectException) 
            {
                Log.d(TAG, "CouldNotConnectToSocket", eConnectException);
                 closeSocket(mBluetoothSocket);
                 return;
            }
        }
    
        private void closeSocket(BluetoothSocket nOpenSocket) 
        {
            try 
            {
                nOpenSocket.close();
                Log.d(TAG, "SocketClosed");
            } 
            catch (IOException ex) 
            {
                Log.d(TAG, "CouldNotCloseSocket");
            }
        }
    
        private Handler mHandler = new Handler() 
        {
            @Override
            public void handleMessage(Message msg) 
            {
                mBluetoothConnectProgressDialog.dismiss();
                Toast.makeText(Main.this, "DeviceConnected", 5000).show();
            }
        };
    }
    

    Thanks.

    0 讨论(0)
提交回复
热议问题