Передача сообщений и файлов с помощью Bluetooth в Android

Я разрабатываю приложение, в котором сначала мы должны искать и подключать доступные сопряженные устройства Bluetooth. Я сделал до связи. Но после этого я поставил один экран, который запрашивает выбор между текстом и передачей файлов. Когда я выберу текст, откроется еще один экран, в котором есть edittext и кнопка. Независимо от типа пользователя в edittext и нажатия кнопки, которая должна быть передана на подключенное устройство BT, например приложение BT chat. Я прошел через приложение BT chat, но это сложно понять. Мне нужна отдельная функция, которая выполняет перенос задачи. Ниже приведен код подключения.

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 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 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(this, R.layout.device_name);

        ListView mPairedListView = (ListView) findViewById(R.id.paired_devices);
        mPairedListView.setAdapter(mPairedDevicesArrayAdapter);
        mPairedListView.setOnItemClickListener(mDeviceClickListener);

        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        Set 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"?>


    <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" />


message.xml

<?xml version="1.0" encoding="utf-8"?>


    

        
    

    <button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/send" />


4
nl ja de
что ты хочешь делать?
добавлено автор Anil Bhatiya, источник
означает, что вы хотите точно реализовать?
добавлено автор Anil Bhatiya, источник
Могу ли вы, пожалуйста, поместить свой полный код в XML, поэтому я могу пройти через ваш код .....
добавлено автор Denny Sharma, источник

3 ответы

Вызовите следующий метод:

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);
        }
    }

Now Put following in Your Oncreate of the Activity with EditText.

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

И вызов выше метода, как

sendDataToPairedDevice(editText1.getText() ,mBluetoothDevice);

в Onclick нужной кнопки .

thats it. just upvote if you use it, thanks, enjoy buddy.

6
добавлено
Рады приветствовать моего дорогого друга, только если я помог вам мгновенно.
добавлено автор shridutt kothari, источник
просто передайте свой объект mBluetoothDevice, который вы создали в первом упражнении выше.
добавлено автор shridutt kothari, источник
добавлено автор shridutt kothari, источник
Ok .. чем передать MAC-адрес устройства из Первой операции в другую деятельность с помощью намерения, так как Mac-адрес является строкой (поэтому у вас не должно быть никаких проблем). Чем в другой деятельности//Получить MAC-адрес устройства Как этот String адрес = aim.getExtras (). GetString («Ключ для MAC-адреса»);//Получить объект BluetoothDevice. Устройство BluetoothDevice = mBluetoothAdapter.getRemoteDevice (адрес);
добавлено автор shridutt kothari, источник
@Shridutt ... Я обновил свой код, как вы сказали мне ... Но я не получаю никакого вывода ...
добавлено автор Anil Bhatiya, источник
пожалуйста, дайте мне некоторое решение ...
добавлено автор Anil Bhatiya, источник
все еще я не могу передать MAC-адрес другой деятельности ...
добавлено автор Anil Bhatiya, источник
для message.xml есть одна кнопка edittext и send ... Для этого я создал Message.java. Как передать объект в этой активности .java ...
добавлено автор Anil Bhatiya, источник
@Shridutt ... Не получается ... Я создаю различную активность для отправки сообщения ... Как передать объект устройства Bluetooth другим действиям ..
добавлено автор Anil Bhatiya, источник
@Shridutt ... Эй, (устройство BluetoothDevice), какие параметры мне нужно передать ??? MAC-адрес целевого устройства ????
добавлено автор Anil Bhatiya, источник
Спасибо ... Позвольте мне реализовать его ... До скорой встречи ...
добавлено автор Anil Bhatiya, источник
@shridutt ..... Можем ли мы продолжить обсуждение в чате?
добавлено автор Denny Sharma, источник
Это дает ошибку: конечная точка транспорта не подключена .... Пожалуйста, помогите мне ....
добавлено автор Denny Sharma, источник
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();
                            }





                }
            });
1
добавлено
хорошо, так где ур код?
добавлено автор Anil Bhatiya, источник
У вас установлена ​​связь с устройством, на которое вы хотите отправить данные?
добавлено автор Anil Bhatiya, источник
До и до тех пор, пока вы не скажете мне, что такое точное требование ура, как бы я узнал, что вам нужен какой код? Лучше, скажи мне, что тебе нужно точно?
добавлено автор Anil Bhatiya, источник
Брода, я не остаюсь в наличии все время ... Я тоже здесь работаю ...
добавлено автор Anil Bhatiya, источник
Что вы делаете anil..пожалуйста, помогите мне быстро, если вы сможете это сделать. Я действительно благодарен за это.
добавлено автор Denny Sharma, источник
См. Выше на этой странице yar ... My Launcher class: MainActivity.java и все остальные :: total 3 class..если мы устанавливаем приложение на моем устройстве, а затем все, что у нас есть, с другим устройством, кроме создания пары?
добавлено автор Denny Sharma, источник
Яр, пожалуйста, дай мне немного времени ... это действительно срочно
добавлено автор Denny Sharma, источник
Эй, анил, пожалуйста, помогите мне, чувак ... мне нужно срочно! пожалуйста, предоставьте решение на моей почте сегодня, если это возможно .... я действительно благодарен вам за это .... [email protected]
добавлено автор Denny Sharma, источник
Пожалуйста, см. Мой полный код, который я опубликовал снова. пожалуйста, помогите мне!
добавлено автор Denny Sharma, источник
Пожалуйста, напишите мой код, который я опубликовал ниже: Да, я сделал соединение, и я на странице, на которой есть текст или изображение, которое мне нужно отправить ... Это дает ошибку, которая: java.io.IOException: конечная точка транспорта не подключена
добавлено автор Denny Sharma, источник
Также текст не отправляется в мою демонстрационную версию, это дает ошибку. Пожалуйста, помогите мне, мне нужно срочно ....
добавлено автор Denny Sharma, источник
На самом деле, я хочу отправить файл с одного устройства на другое устройство через bluetooth в моем приложении, как и отправку текстового файла.
добавлено автор Denny Sharma, источник

Наконец получил ответ ...

    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();
                }


            }
        });






    }


}
1
добавлено
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

Android Developers
Android Developers
4 476 участник(ов)

Общаемся на темы, посвященным Android-разработке, SDK, Kotlin, Realm и т.д.

Android Architecture
Android Architecture
2 186 участник(ов)

Русскоязычный чат по архитектуре в андроид приложениях. Подробнее: http://telegra.ph/Android-Architecture-12-24

rus-speaking/android
rus-speaking/android
1 705 участник(ов)

Основной чат по Android разработке (вопрос-ответ). ПРАВИЛА: bit.ly/andr-rules. NEWS: bit.ly/AnrdResId ЧАТЫ: Основной: bit.ly/andr-main IDE, сборка, Git, сервисы: bit.ly/andr-tools Оффтоп: bit.ly/andr-offtop Конференции, события: bit.ly/andr-events Вакансии, найм: bit.ly/andr-job Архитектура: bit.ly/andr-patterns Rx: bit.ly/andr-rx Тестирование: bit.ly/andr-test Kotlin: bit.ly/andr-kotlin Хаmarin: bit.ly/andr-xamarin За мат, спам, агрессию, предложения о работе, оффтоп в этом канале - бан на сутки и более ☢☢☢

Android Dev Подкаст
Android Dev Подкаст
1 325 участник(ов)

Комната для обсуждения Android Dev подкаста apptractor.ru/AndroidDev/ Общее обсуждение Android: https://t.me/android_ru Остальные чаты про Android: http://t.me/devChats Наши новости https://t.me/androiddevpodcast_news

Android Guards
Android Guards
602 участник(ов)

Обсуждение любых вопросов касающихся безопасности Android. - Защита системы и приложений - Уязвимости и эксплойты - Вредоносное ПО - Копание в кишках системы и приложений (RE)

Android JOB
Android JOB
466 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению Android (full-time, part-time, remote и разовые подработки)

AndroidDev :: Разработка. It's Android time now!
AndroidDev :: Разработка. It's Android time now!
458 участник(ов)

It's Android time now! Чат разработчиков Android. Вакансии, резюме и информацию о митапах размещать можно. Публикацию скрытой и явной рекламы ваших каналов и сайтов после получения разрешения от @olegushakov

Aandroid Talks!
Aandroid Talks!
212 участник(ов)

Чат об общих вопросах по ОС Android. Чат для разработки под андроид - pro.android: https://t.me/joinchat/AAAAAEKIFKnmRT9cMebb9w

Android Rus
Android Rus
68 участник(ов)