如何搜索不成对的蓝牙设备?

时间:2015-05-05 23:45:21

标签: android search bluetooth device

我正在做一个使用蓝牙通信的应用程序。

首先,我正在尝试获取设备可检测到的所有蓝牙设备列表。

我设法在列表视图中加载所有配对设备,但我无法列出未配对的设备,我找到了一些教程,但我有点困惑,因为我有点新android开发&蓝牙通信。

所以我需要找到范围内的每个蓝牙设备,我不知道该怎么做(懒惰)

这是(编辑过的)代码:

package com.voice.benz.instaurentremote;

import android.bluetooth.*;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ListView;
import android.widget.TextView;
import android.bluetooth.BluetoothAdapter;
import android.content.Intent;
import android.widget.ArrayAdapter;
import java.util.Set;
import android.content.Context;
import android.content.BroadcastReceiver;
import android.view.Window;
import android.app.Activity;
import android.content.IntentFilter;
import android.util.Log;
import android.widget.Button;
import android.view.View.OnClickListener;
import android.widget.AdapterView.OnItemClickListener;
import java.util.ArrayList;
public class bluetooth extends ActionBarActivity {

    private TextView bluetoothPaired;
    private TextView txt_status;
    private BluetoothAdapter btAdapter;

    private ListView newdevices_listview;

    private Set<BluetoothDevice>pairedDevices;
    private ArrayAdapter<String> adapter = null;
    private static final int BLUETOOTH_ON = 1000;
    private static final int REQUEST_ENABLE_BT = 1;

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

        setContentView(R.layout.activity_bluetooth);

        // Initialize the button to perform device discovery

        txt_status          = (TextView) findViewById(R.id.txt_status);


        newdevices_listview = (ListView)findViewById(R.id.newdevices_listview);
        adapter=new             ArrayAdapter<String>(this,android.R.layout.simple_list_item_1);
        newdevices_listview.setAdapter(adapter);


        // Initialize adapter
        btAdapter =  BluetoothAdapter.getDefaultAdapter();


// Register for broadcasts when a device is discovered
        IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
        this.registerReceiver(mReceiver, filter);

        filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
        this.registerReceiver(mReceiver, filter);

    }

    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();

            if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {
                //discovery starts, we can show progress dialog or perform other tasks
            } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
                //discovery finishes, dismis progress dialog
            } else if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                //bluetooth device found
                BluetoothDevice device = (BluetoothDevice) intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

                txt_status.setText("Found device " + device.getName());
                adapter.add(device.getName() + "\n" + device.getAddress());
            }
        }
    };



    public void attivaBluetooth (View view) {

        if (!btAdapter.isEnabled()) {
            Intent turnOn = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(turnOn, 1);

        }
    }

        public void cercaDispositivi (View view)
    {
        IntentFilter filter = new IntentFilter();

        filter.addAction(BluetoothDevice.ACTION_FOUND);
        filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
        filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);

        registerReceiver(mReceiver, filter);
        btAdapter.startDiscovery();

    }


    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        unregisterReceiver(mReceiver);
    }

    public void disattivaBluetooth (View view)
    {
        if (btAdapter.isEnabled())
        {
            btAdapter.disable();
        }
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_bluetooth, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }



}

1 个答案:

答案 0 :(得分:0)

您似乎无法在任何地方注册BroadcastReceiver myBluetoothReceiver。如果你在onResume()onCreate中这样做,那么你可能会有更多的运气。 :)