Android蓝牙用于发现设备,方法广播接收器从不调用



我对这个代码有问题,一切都正常,但当我按下扫描按钮时,什么都没有发生。原因是,我确信这个代码是正确的。我遵循蓝牙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 中添加这两个权限

最新更新