Android Bluetooth-Entwicklung (1)

Einführung in Bluetooth

Bluetooth (Bluetooth) ist ein drahtloser Technologiestandard, der den Datenaustausch und die Kommunikation zwischen Geräten über kurze Entfernungen ermöglicht. Die Bluetooth-Technologie wurde ursprünglich 1994 vom schwedischen Unternehmen Ericsson entwickelt. Der Name leitet sich vom übersetzten Namen „Harald Bluetooth“ des dänischen Königs Harald Brutt ab, der einst Skandinavien vereinte.

Die Bluetooth-Technologie basiert auf Hochfrequenztechnologie, die Betriebsfrequenz beträgt 2,4 GHz und kann die gleichzeitige Verbindung von bis zu 8 Geräten unterstützen. Die Bluetooth-Technologie ist weit verbreitet, unter anderem in Mobiltelefonen, Computern, Audiogeräten, Armbändern, Smart Homes und anderen Bereichen, und kann Funktionen wie Datenübertragung, Audioübertragung, Fernbedienung und Positionierung realisieren. Zu den Vorteilen der Bluetooth-Technologie gehören geringer Stromverbrauch, niedrige Kosten, Benutzerfreundlichkeit und hohe Zuverlässigkeit, was sie zu einem integralen Bestandteil moderner Kommunikation macht.

Vorwort

Bluetooth ist eine drahtlose Kommunikationstechnologie für kurze Entfernungen. Zu den Kommunikationstechnologien für kurze Entfernungen für mobile Geräte, mit denen wir relativ vertraut sind, gehören NFC , Infrarot und Bluetooth.

NFC: Wird hauptsächlich für die einfache Bedienung und das sofortige Durchziehen der entsprechenden Karte verwendet

Infrarot: Wird hauptsächlich zur Tastensteuerung verwendet, z. B. bei der Fernbedienung von Haushaltsgeräten

Bluetooth: Es wird hauptsächlich für die komplexe und massive Datenübertragung zwischen zwei Geräten verwendet (hier wird es in Low-Power-Bluetooth und klassisches Bluetooth unterteilt ). Heute werde ich das klassische Bluetooth mit Ihnen teilen

Entwicklungsschritte für Android Bluetooth

1. Prüfen Sie, ob das Gerät Bluetooth unterstützt

In der Anwendung müssen Sie zunächst prüfen, ob das Gerät Bluetooth unterstützt. Sie können die erforderlichen Bluetooth-Berechtigungen in der Datei AndroidManifest.xml deklarieren und mithilfe der BluetoothAdapter-Klasse abfragen, ob das Gerät Bluetooth unterstützt

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter == null) {
    // 该设备不支持蓝牙
} else {
    // 该设备支持蓝牙
}

2. Schalten Sie Bluetooth ein

In Ihrer Anwendung müssen Sie den Benutzer anleiten, Bluetooth einzuschalten. Sie können eine Anfrage mit dem Ereignis ACTION_REQUEST_ENABLE stellen

if (!bluetoothAdapter.isEnabled()) {
    //如果该设备蓝牙未开启

    Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}

3. Suchen Sie nach verfügbaren Bluetooth-Geräten

Sobald Bluetooth aktiviert ist, können Sie mit der Suche nach Geräten beginnen. Sie können Scanvorgänge mit der BluetoothAdapter-Klasse und der BluetoothDevice-Klasse durchführen

bluetoothAdapter.startDiscovery();

Sie können die BroadcastReceiver-Klasse verwenden, um Scanergebnisse zu empfangen:

private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (BluetoothDevice.ACTION_FOUND.equals(action)) {
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            //该设备成功搜索到蓝牙设备
        }
    }
};

4. Wählen Sie Bluetooth und koppeln Sie erfolgreich damit

Über das BluetoothAdapter-Objekt können Sie eine Bluetooth-Kopplung durchführen. Sie müssen die BluetoothDevice-Klasse instanziieren und ihre connect()-Methode verwenden, um eine Verbindung herzustellen

BluetoothAdapter mBluetoothAdapter;
BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
device.createBond();

 5. Wählen Sie Bluetooth und stellen Sie eine Verbindung damit her

Über das BluetoothDevice-Objekt können Sie die BluetoothSocket-Klasse verwenden, um eine Bluetooth-Verbindung herzustellen. Sie müssen die BluetoothSocket-Klasse instanziieren und ihre connect()-Methode verwenden, um eine Verbindung herzustellen

BluetoothSocket socket = device.createRfcommSocketToServiceRecord(MY_UUID);
socket.connect();

6. Datenübertragung

Sobald die Bluetooth-Verbindung hergestellt wurde, können Sie die Methoden getInputStream() und getOutputStream() des BluetoothSocket zum Senden und Empfangen von Daten verwenden

InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();

Das Obige stellt den grundlegenden Prozess der Android-Bluetooth-Entwicklung dar. Es ist zu beachten, dass in der tatsächlichen Entwicklung komplexe Situationen wie das Trennen der Bluetooth-Verbindung und die Verbindung mehrerer Geräte behandelt werden müssen.

7. Trennen Sie die Bluetooth-Verbindung und schalten Sie Bluetooth aus

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
bluetoothAdapter.disable(); //关闭蓝牙

Hinweis: Android stellt das Bluetooth-Modulverwaltungstool BluetoothAdapter (Bluetooth-Adapter) bereit.

Einige gängige Methodenbeschreibungen der BluetoothAdapter-Klasse:

1. enable() – Bluetooth einschalten

2.disable() – Bluetooth ausschalten

3. startDiscovery() – Suche nach Geräten starten

4. cancelDiscovery() – die Erkennung des Geräts abbrechen

5. getBondedDevices() – Liste der gekoppelten Geräte abrufen

6. getRemoteDevice(String-Adresse) – Remote-Geräteobjekt abrufen

7. setState(int state) – Bluetooth-Status festlegen

8. setScanMode(int mode) – Scanmodus einstellen

9. getScanMode() – Scanmodus abrufen

10. getName() – den Namen des lokalen Bluetooth-Geräts abrufen

11. setName(String name) – Legen Sie den lokalen Bluetooth-Gerätenamen fest

12. getAddress() – lokale Bluetooth-Geräteadresse abrufen

13. isDiscovering: Bestimmen Sie, ob nach Bluetooth-Geräten in der Nähe gesucht wird

14. getBluetoothLeScanner() – Holen Sie sich das BluetoothLeScanner-Objekt

15. getProfileProxy(Kontextkontext, BluetoothProfile.ServiceListener-Listener, int-Profil) – Erstellen Sie BluetoothProfile

16. closeProfileProxy(int Profile, BluetoothProfile Proxy) – Schließen Sie die Verbindung des BluetoothProfile-Objekts

Demonstration des Android-Bluetooth-Entwicklungseffekts

1. Deklarieren Sie die Bluetooth-Berechtigung

Erstellen Sie ein neues Android-Projekt und deklarieren Sie dann die relevanten Berechtigungen in der AndroidManifest-Manifestdatei

2. Erhalten Sie dynamisch die Standortberechtigung

package com.example.bluetoothdemo;

import androidx.appcompat.app.AppCompatActivity;

import android.Manifest;
import android.annotation.SuppressLint;
import android.content.pm.PackageManager;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //判断是否有访问位置的权限,没有权限,直接申请位置权限
        isPermission();
    }

    //动态获取位置权限
    @SuppressLint("NewApi")
    private void isPermission(){
        if ((checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
                || (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)) {
            requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, 200);
        }
    }
}

Laufergebnis:

3. Stellen Sie fest, ob das Gerät die Bluetooth-Funktion unterstützt

package com.example.bluetoothdemo;

import androidx.appcompat.app.AppCompatActivity;

import android.Manifest;
import android.annotation.SuppressLint;
import android.bluetooth.BluetoothAdapter;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private BluetoothAdapter mBluetoothAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //初始化蓝牙适配器
        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();


        if (isBluetoothSupport()){
            Toast.makeText(MainActivity.this, "该设备支持蓝牙功能", Toast.LENGTH_SHORT).show();
        }else {
            Toast.makeText(MainActivity.this, "该设备不支持蓝牙功能", Toast.LENGTH_SHORT).show();
        }
    }


    //判断该设备是否支持蓝牙功能
    private Boolean isBluetoothSupport(){
        if(mBluetoothAdapter == null){
            return false;
        }else {
            return true;
        }
    }
}

Laufergebnis:

4. Stellen Sie fest, ob das Gerät Bluetooth-fähig ist

package com.example.bluetoothdemo;

import androidx.appcompat.app.AppCompatActivity;

import android.Manifest;
import android.annotation.SuppressLint;
import android.bluetooth.BluetoothAdapter;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private BluetoothAdapter mBluetoothAdapter;

    @SuppressLint("MissingPermission")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //初始化蓝牙适配器
        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();


            //判断蓝牙是否打开
            if(!isBluetoothEnabled()){
                //如果蓝牙未开启,则申请打开蓝牙
                Intent enableBluetoothIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                startActivityForResult(enableBluetoothIntent, RESULT_CANCELED);
            }else {

            }

    }




    /**
     * 检查该设备蓝牙是否开启
     */
    private boolean isBluetoothEnabled(){
        if(mBluetoothAdapter.isEnabled()){
            return true;
        }else {
            return false;
        }
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == RESULT_CANCELED) {
            if (resultCode == RESULT_OK) {
                // 蓝牙已成功开启
                Toast.makeText(MainActivity.this, "用户已开启蓝牙", Toast.LENGTH_SHORT).show();
            } else {
                // 用户取消了蓝牙开启请求
                Toast.makeText(MainActivity.this, "用户已拒绝开启蓝牙", Toast.LENGTH_SHORT).show();
            }
        }
    }

}

Laufergebnis:

5. Holen Sie sich das Bluetooth-Gerät, mit dem das Gerät gekoppelt wurde

package com.example.bluetoothdemo;

import androidx.appcompat.app.AppCompatActivity;

import android.Manifest;
import android.annotation.SuppressLint;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

import java.util.Set;

public class MainActivity extends AppCompatActivity {
    private BluetoothAdapter mBluetoothAdapter;


    @SuppressLint({"MissingPermission", "MissingInflatedId"})
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //初始化蓝牙适配器
        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

        //判断是否有访问位置的权限,没有权限,直接申请位置权限
        isPermission();


        getPairedDevices();
    }

    //动态获取位置权限
    @SuppressLint("NewApi")
    private void isPermission(){
        if ((checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
                || (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)) {
            requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, 200);
        }
    }

    
    @SuppressLint("MissingPermission")
    private void getPairedDevices() {
        BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();
        if (pairedDevices.size() > 0) {
            for (BluetoothDevice device : pairedDevices) {
                String deviceName = device.getName();
                String deviceHardwareAddress = device.getAddress();
                Log.d("MainActivity","设备名:"+deviceName+'\n'+"地址:"+deviceHardwareAddress);
            }
        }
    }


}

Laufergebnis:

6. Suchen Sie nach Bluetooth-Geräten

package com.example.bluetoothdemo;

import androidx.appcompat.app.AppCompatActivity;

import android.Manifest;
import android.annotation.SuppressLint;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

import java.util.Set;

public class MainActivity extends AppCompatActivity {
    private BluetoothAdapter mBluetoothAdapter;


    @SuppressLint({"MissingPermission", "MissingInflatedId"})
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //初始化蓝牙适配器
        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

        //判断是否有访问位置的权限,没有权限,直接申请位置权限
        isPermission();


        mBluetoothAdapter.startDiscovery();
        registerBluetoothReceiver();
    }

    //动态获取位置权限
    @SuppressLint("NewApi")
    private void isPermission(){
        if ((checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
                || (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)) {
            requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, 200);
        }
    }

  

    private void registerBluetoothReceiver(){
        //filter注册广播接收器
        IntentFilter filter = new IntentFilter();


        //蓝牙当前状态
        filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);


        //开始扫描蓝牙设备广播
        filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);

        //找到蓝牙设备广播
        filter.addAction(BluetoothDevice.ACTION_FOUND);

        //扫描蓝牙设备结束广播
        filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);

        //蓝牙设备配对状态改变广播
        filter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);

        //设备扫描模式改变广播
        filter.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED);

        registerReceiver(receiver, filter);
    }


    //处理找到蓝牙设备和搜索完成的广播消息
    BroadcastReceiver receiver = new BroadcastReceiver() {

        @SuppressLint("MissingPermission")
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();

            //开始查找设备
            if(BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)){
                Log.d("","开始查找");
            }
            //找到蓝牙设备
            else if(BluetoothDevice.ACTION_FOUND.equals(action)){
                //搜到蓝牙设备
                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

                //把搜索到的设备添加到已找到列表中,显示它的信息
                Log.d("","设备名:"+device.getName()+'\n'+"地址:"+device.getAddress());

            }
            //查找设备结束
            else if(BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)){
                //搜索完毕
                Toast.makeText(MainActivity.this, "选择要配对的蓝牙设备", Toast.LENGTH_SHORT).show();
                Log.d("","查找结束");
            }

        }
    };


}

Laufergebnis:

7. Koppeln Sie Bluetooth-Geräte

package com.example.bluetoothdemo;

import androidx.appcompat.app.AppCompatActivity;

import android.Manifest;
import android.annotation.SuppressLint;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

import java.util.Set;

public class MainActivity extends AppCompatActivity {
    private BluetoothAdapter mBluetoothAdapter;


    @SuppressLint({"MissingPermission", "MissingInflatedId"})
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //初始化蓝牙适配器
        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

        //判断是否有访问位置的权限,没有权限,直接申请位置权限
        isPermission();


        getPairedDevices();

    }

    //动态获取位置权限
    @SuppressLint("NewApi")
    private void isPermission(){
        if ((checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
                || (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)) {
            requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, 200);
        }
    }

   

    @SuppressLint("MissingPermission")
    private void getPairedDevices() {
        BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();
        if (pairedDevices.size() > 0) {
            int i=0;
            for (BluetoothDevice device : pairedDevices) {
                i++;
                if(i==pairedDevices.size()){
                    device.createBond();
                    Log.d("","本机与另一个蓝牙设备"+device.getName()+"成功配对");
                }
                String deviceName = device.getName();
                String deviceHardwareAddress = device.getAddress();
                Log.d("","设备名:"+deviceName+'\n'+"地址:"+deviceHardwareAddress);
            }
        }
    }


}

Laufergebnis:

Dieser Artikel wird zuerst hier geteilt, und Sie können den Code kopieren, um ihn auszuführen. Im nächsten Artikel werde ich Ihnen die tatsächliche Verwendung des Bluetooth-Projekts mitteilen

Hinweise zur Android-Bluetooth-Entwicklung:

  1. Stellen Sie sicher, dass Ihr Gerät Bluetooth unterstützt: Stellen Sie vor der Entwicklung sicher, dass Ihr Gerät Bluetooth unterstützt. Die meisten modernen Smartphones und Tablets unterstützen Bluetooth.

  2. Erhalten Sie die erforderlichen Berechtigungen: Bevor Sie Bluetooth-Anwendungen entwickeln, müssen Sie die entsprechenden Berechtigungen einholen. Beispielsweise müssen Sie die Berechtigung „android.permission.BLUETOOTH“ anfordern, damit Ihre Anwendung Bluetooth verwenden kann.

  3. Bestimmen Sie den Typ des Bluetooth-Profils, den Sie benötigen: Android bietet zwei verschiedene Arten von Bluetooth-Profilen: klassisches Bluetooth und Bluetooth Low Energy. Die Verwendung von Bluetooth Low Energy kann die Akkulaufzeit des Geräts verlängern, erfordert jedoch Android 4.3 (API-Level 18) oder höher.

  4. Stellen Sie sicher, dass Ihre App mit anderen Apps kompatibel ist: Bevor Sie Bluetooth in Ihrer App verwenden, stellen Sie sicher, dass sie mit anderen Apps kompatibel ist. Wenn Ihre Anwendung und andere Anwendungen gleichzeitig Bluetooth verwenden, kann es zu Konflikten und fehlerhaftem Verhalten kommen.

  5. Verwenden Sie das richtige Bluetooth-Protokoll: Bei der Entwicklung einer Bluetooth-Anwendung müssen Sie sicherstellen, dass Sie das richtige Bluetooth-Protokoll verwenden. Verschiedene Geräte und Anwendungen verwenden möglicherweise unterschiedliche Bluetooth-Protokolle. Daher müssen Sie bestimmen, welche Protokolle Ihre Anwendung verwenden muss.

  6. Umgang mit Fehlern und Ausnahmen: Bei der Verwendung von Bluetooth können Fehler und Ausnahmen auftreten. Stellen Sie sicher, dass Ihre Anwendung über den richtigen Fehlerbehandlungs- und Ausnahmebehandlungscode verfügt, um sicherzustellen, dass sie die Bluetooth-Verbindung ordnungsgemäß verarbeitet, wenn etwas schief geht.

  7. Debuggen Sie Ihre Anwendung: Stellen Sie bei der Entwicklung Ihrer Bluetooth-Anwendung sicher, dass Sie geeignete Debugging-Tools verwenden. Android Studio bietet einige integrierte Debugging-Tools zum Diagnostizieren und Beheben von Bluetooth-Verbindungsproblemen.

  8. Vermeiden Sie bekannte Fehler bei Bluetooth: Es gibt viele bekannte Fehler, die bei der Verwendung von Bluetooth auftreten können. Um diese Fehler zu vermeiden, schreiben Sie geeigneten Code, um sicherzustellen, dass Ihre Anwendung diese Fehler korrekt verarbeitet.

Es ist zu beachten, dass die Bluetooth-Entwicklung besondere Aufmerksamkeit auf Energie- und Leistungsprobleme erfordert. Bei häufigen Bluetooth-Suchvorgängen, Verbindungen und Datenübertragungsvorgängen sollte diese minimiert oder optimiert werden, um übermäßige Auswirkungen auf die Geräteleistung und -leistung zu vermeiden.

Supongo que te gusta

Origin blog.csdn.net/Ai1114/article/details/132270959
Recomendado
Clasificación