繁体   English   中英

Android 蓝牙用于发现设备,方法广播接收器永远不会被调用

[英]Android Bluetooth for discover devices, method Broadcast receiver is never called

我对这段代码有问题,一切正常,但是当我按下扫描按钮时,什么也没有发生,为什么,我确定这段代码是正确的,我遵循蓝牙 Android 开发者教程,在调试时,我发现 BroadcastReceiver 的 onReceive 方法从未被调用。 但是,蓝牙已启用。 我错过了什么?

package com.example.bluetoothmaccounter;


import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

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.media.MediaPlayer;
import android.os.Bundle;
import android.os.Vibrator;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
    Button buttonON , buttonOFF, scanBt;
    ListView deviceList;
    ArrayList<String> arrayList = new ArrayList<String>();
    ArrayAdapter<String> arrayAdapter;
    BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    int requestCodeForEnable = 1;
    Intent btEnablingIntent;
    Vibrator vibrator;
    MediaPlayer mediaPlayer;
    TextView textView2 ;

        @Override
        protected void onCreate (Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        buttonOFF = findViewById(R.id.bt_off);
        buttonON = findViewById(R.id.bt_on);
        scanBt = findViewById(R.id.bt_scan);
        deviceList = findViewById(R.id.device_list);
        btEnablingIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
        mediaPlayer = MediaPlayer.create(this, R.raw.alarm);
        textView2 = findViewById(R.id.textView2);
        // /////////////////// Enable bluetooth ///////////////////////
        buttonON.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (bluetoothAdapter == null) {
                    Toast.makeText(getApplicationContext(), "this device not support bluetooth", Toast.LENGTH_SHORT).show();
                } else {
                    if (!bluetoothAdapter.isEnabled()) {
                        startActivityForResult(btEnablingIntent, requestCodeForEnable);
                    }
                }

            }


        });

        // /////////////////// disable bluetooth ///////////////////////

        buttonOFF.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (bluetoothAdapter.isEnabled()) {
                    bluetoothAdapter.disable();
                    Toast.makeText(getApplicationContext(), "bluetooth disable", Toast.LENGTH_SHORT).show();

                }
            }
        });

        // /////////////////// start scan ///////////////////////

        scanBt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                arrayList.clear();
                if (!bluetoothAdapter.isEnabled()) {
                    Toast.makeText(getApplicationContext(), " bluetooth not Enabled", Toast.LENGTH_SHORT).show();

                } else {
                    bluetoothAdapter.startDiscovery();
                    Toast.makeText(getApplicationContext(), "discover started", Toast.LENGTH_SHORT).show();
                }
            }
        });
        try {
            IntentFilter intentFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
            textView2.setText("befoore receiver");
            registerReceiver(receiver, intentFilter);
            arrayAdapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, arrayList);
            deviceList.setAdapter(arrayAdapter);

        } catch (Exception e) {
            textView2.setText("exeption" + e.getMessage());
        }
    }

    // Create a BroadcastReceiver for ACTION_FOUND.
    private final BroadcastReceiver receiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            textView2.setText("on receive 1");
            String action = intent.getAction();
            if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                textView2.setText("found");
                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                arrayList.add(device.getName() + device.getAddress());
                String size = "size is " + arrayList.size();
                textView2.setText(size);
                arrayAdapter.notifyDataSetChanged();
                if (arrayList.size() >= 1) {
                    Toast.makeText(getApplicationContext(), "There are :" + arrayList.size() + "person here ", Toast.LENGTH_LONG).show();
                    vibrator.vibrate(3 * 1000);
                    mediaPlayer.start();


                }

//
            }
        }
    };


        @Override
        protected void onDestroy () {
        super.onDestroy();


        // Don't forget to unregister the ACTION_FOUND receiver.
        textView2.setText("destrrooooooy");
        unregisterReceiver(receiver);
    }
    }
 <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission>
<uses-permission android:name="android.permission.BLUETOOTH"></uses-permission>

需要在AndroidManifest.xml中添加这两个权限

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM