蓝牙BroadcastReceiver返回null

时间:2017-01-21 21:44:26

标签: android bluetooth broadcastreceiver

我正在学习Android代码,我的第一个项目使用蓝牙,所以我想我会从那里开始。基本上我只是按一个按钮扫描其他可用的蓝牙设备,并在textview中显示其名称。

我使用ACTION_FOUND过滤器注册BroadcastReceiver(mReceiver)。我知道我正在开始正确发现,因为其他设备可以看到我,但我无法得到他们的名字。通过AS进行调试似乎表明我的mReceiver实例为空。

public class MainActivity extends AppCompatActivity {

private Scanner_Bluetooth mainBLScanner;
public BroadcastReceiver mReceiver;
public int DISCOVERY_REQUEST = 1;
public static final String[] runtimePermissions = {};

public static final int LOCATION_PERMISSION_IDENTIFIER = 1;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
    Button buttonConnect = (Button) findViewById(R.id.buttonBT);
    final TextView tv_name =(TextView)findViewById(R.id.tv_name);
    mainBLScanner = new Scanner_Bluetooth(this, 5000, -75);
    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
    mReceiver = new BroadcastReceiver(getApplicationContext());
    registerReceiver(mReceiver, filter);

    View.OnClickListener listener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mainBLScanner.Start();
            tv_name.setText(mReceiver.getDeviceName());
        }
    };
    buttonConnect.setOnClickListener(listener);


}

@Override
protected void onDestroy() {
    unregisterReceiver(mReceiver);
    super.onDestroy();
}

@Override
protected void onStop() {
    unregisterReceiver(mReceiver);
    super.onStop();
}

这就是我实现BroadcastReceiver的方式

public class BroadcastReceiver extends android.content.BroadcastReceiver {
private String deviceName = "DUMMY";
private String deviceHardwareAddress;
Context activityContext;
private static final String TAG = "BroadcastReceiver";

public BroadcastReceiver(Context activityContext) {
    this.activityContext = activityContext;
}

public String getDeviceName(){
    return deviceName;
}

public String getAddress(){
    return deviceHardwareAddress;
}
//this detects when bluetooth is on/off
@Override
public void onReceive(Context context, Intent intent) {


        final String sAction = intent.getAction();
    Log.d(TAG, "start onReceive: " + sAction);
    if (sAction.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
        final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR);

        switch (state) {
            case BluetoothAdapter.STATE_OFF:

                Toast.makeText(context, "Bluetooth is off", Toast.LENGTH_LONG).show();
                break;
            case BluetoothAdapter.STATE_TURNING_OFF:
                Toast.makeText(context, "Bluetooth is turning off", Toast.LENGTH_LONG).show();
                break;
            case BluetoothAdapter.STATE_ON:

                Toast.makeText(context, "Bluetooth is on", Toast.LENGTH_LONG).show();
                break;
            case BluetoothAdapter.STATE_TURNING_ON:

                Toast.makeText(context, "Bluetooth is turning on", Toast.LENGTH_LONG).show();
                break;

            default:
                break;
        }

        if (BluetoothDevice.ACTION_FOUND.equals(sAction)) {
            Log.d(TAG, " Action_Found");
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            Toast.makeText(context,"Device Found!!",Toast.LENGTH_LONG).show();
            this.deviceName = device.getName();
            this.deviceHardwareAddress = device.getAddress(); // MAC address

        }

    }

}}

在我的清单中,我同时拥有蓝牙和蓝牙管理员权限。粗糙&精细访问。

0 个答案:

没有答案