Mensaje y transferencia de archivos usando Bluetooth en android

Estoy desarrollando una aplicación en la que primero tenemos que buscar y conectar los dispositivos Bluetooth emparejados disponibles. Lo he hecho hasta la conexión. Pero después de eso he puesto una pantalla que pide elegir entre el texto y la transferencia de archivos. Cuando selecciono el texto entonces se abrirá una pantalla más en la que hay edittext y botón. Cualquiera que sea el usuario escribe en edittext y hace clic en el botón que debe ser transferido al dispositivo BT conectado como BT aplicación de chat. He pasado por la aplicación de chat de BT, pero es complejo de entender. Quiero una función separada que no transfiera la tarea. A continuación se muestra mi código de conexión.

Main.java

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); } } } }); } 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, "Device Connected", 5000).show(); Intent in = new Intent(getBaseContext(), Option.class); startActivity(in); } }; } 

DeviceListActivity.java

 public class DeviceListActivity extends Activity { protected static final String TAG = "TAG"; private BluetoothAdapter mBluetoothAdapter; private ArrayAdapter<String> mPairedDevicesArrayAdapter; @Override protected void onCreate(Bundle mSavedInstanceState) { super.onCreate(mSavedInstanceState); requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); setContentView(R.layout.device_list); setResult(Activity.RESULT_CANCELED); mPairedDevicesArrayAdapter = new ArrayAdapter<String>(this, R.layout.device_name); ListView mPairedListView = (ListView) findViewById(R.id.paired_devices); mPairedListView.setAdapter(mPairedDevicesArrayAdapter); mPairedListView.setOnItemClickListener(mDeviceClickListener); mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); Set<BluetoothDevice> mPairedDevices = mBluetoothAdapter.getBondedDevices(); if (mPairedDevices.size() > 0) { findViewById(R.id.title_paired_devices).setVisibility(View.VISIBLE); for (BluetoothDevice mDevice : mPairedDevices) { mPairedDevicesArrayAdapter.add(mDevice.getName() + "\n" + mDevice.getAddress()); } } else { String mNoDevices = getResources().getText(R.string.none_paired).toString(); mPairedDevicesArrayAdapter.add(mNoDevices); } } @Override protected void onDestroy() { super.onDestroy(); if (mBluetoothAdapter != null) { mBluetoothAdapter.cancelDiscovery(); } } private OnItemClickListener mDeviceClickListener = new OnItemClickListener() { public void onItemClick(AdapterView<?> mAdapterView, View mView, int mPosition, long mLong) { mBluetoothAdapter.cancelDiscovery(); String mDeviceInfo = ((TextView) mView).getText().toString(); String mDeviceAddress = mDeviceInfo.substring(mDeviceInfo.length() - 17); Log.v(TAG, "Device_Address " + mDeviceAddress); Bundle mBundle = new Bundle(); mBundle.putString("DeviceAddress", mDeviceAddress); Intent mBackIntent = new Intent(); mBackIntent.putExtras(mBundle); setResult(Activity.RESULT_OK, mBackIntent); finish(); } }; } 

option.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/file" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/txt" /> </LinearLayout> 

Message.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:hint="@string/hint"> <requestFocus /> </EditText> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/send" /> </LinearLayout> 

Llame al siguiente método:

 private void sendDataToPairedDevice(String message ,BluetoothDevice device){ byte[] toSend = message.getBytes(); try { BluetoothSocket socket = device.createInsecureRfcommSocketToServiceRecord(applicationUUID); OutputStream mmOutStream = socket.getOutputStream(); mmOutStream.write(toSend); // Your Data is sent to BT connected paired device ENJOY. } catch (IOException e) { Log.e(TAG, "Exception during write", e); } } 

Ahora ponga el siguiente en su Oncreate de la Activity with EditText.

 EditText editText1 = (EditText) findViewById(R.id.editText1); 

Y Llame al método anterior como

 sendDataToPairedDevice(editText1.getText() ,mBluetoothDevice); 

en el Onclick de su button deseado.

Eso es. just upvote if you use it, thanks, enjoy buddy.

 public void onClick(View v) { // TODO Auto-generated method stub mBluetoothAdapter1 = BluetoothAdapter.getDefaultAdapter(); byte[] toSend=message1.getBytes(); try { final UUID applicationUUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); BluetoothDevice device=mBluetoothAdapter1.getRemoteDevice(MacAddress); BluetoothSocket socket=device.createInsecureRfcommSocketToServiceRecord(applicationUUID); OutputStream mmout=socket.getOutputStream(); mmout.write(toSend); mmout.flush(); mmout.close(); socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); 

Finalmente recibió la respuesta …

  BluetoothAdapter mBluetoothAdapter = null; BluetoothDevice m1BluetoothDevice; public static BluetoothSocket socket;//Get this value from Main Activity Button btn; EditText et; public static String MacAddressesss; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.message); btn=(Button)findViewById(R.id.btn); et=(EditText)findViewById(R.id.et); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub try { String msg=et.getText().toString(); byte tosend= msg.getBytes(); OutputStream out= socket.getOutputStream(); out.write(tosend); } catch(IOException e) { e.printStackTrace(); } } }); } } 
  • Cómo obtener un algoritmo de Hashing de archivo rápido para archivos grandes en un dispositivo móvil
  • Transferencia de archivos entre Android y iPhone a través de bluetooth?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.