3

According to the method BluetoothAdapter.startDiscovery(), the discovery process usually involves an inquiry scan of about 12 seconds. Is there any thing to reduce the inquiry time scan (lower than 12 seconds)?

This is my MainActivity:

package com.example.bluetoothsignal;

import android.os.Bundle;
import android.app.Activity;
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.view.Menu;
import android.widget.EditText;

public class MainActivity extends Activity {

    private EditText statusText;
    private BluetoothAdapter mBtAdapter;

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

        statusText = (EditText) findViewById(R.id.statusText);

        statusText.setText("");
        Intent discoverableIntent = new Intent(
                BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
        discoverableIntent.putExtra(
                BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
        startActivity(discoverableIntent);

        IntentFilter localIntentFilter1 = new IntentFilter(
                "android.bluetooth.device.action.FOUND");
        registerReceiver(this.mReceiver, localIntentFilter1);
        IntentFilter localIntentFilter2 = new IntentFilter(
                "android.bluetooth.adapter.action.DISCOVERY_FINISHED");
        registerReceiver(this.mReceiver, localIntentFilter2);
        IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
        registerReceiver(mReceiver, filter);
        this.mBtAdapter = BluetoothAdapter.getDefaultAdapter();
        this.mBtAdapter.startDiscovery();
    }

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

    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {

        public void onReceive(Context paramContext, Intent paramIntent) {
            String action = paramIntent.getAction();
            if ("android.bluetooth.device.action.FOUND".equals(action)) {
                BluetoothDevice localBluetoothDevice = (BluetoothDevice) paramIntent
                        .getParcelableExtra("android.bluetooth.device.extra.DEVICE");
                int s = paramIntent.getIntExtra(
                        "android.bluetooth.device.extra.RSSI", -32768);
                short s2 = paramIntent.getShortExtra(
                        "android.bluetooth.device.extra.RSSI", Short.MIN_VALUE);
                int s1 = paramIntent.getIntExtra(BluetoothDevice.EXTRA_RSSI,
                        Integer.MIN_VALUE);

                String state = localBluetoothDevice.getAddress() + "\n"
                        + localBluetoothDevice.getName() + "\n" + s + "\n" + s1
                        + "\n" + s2;
                statusText.setText(statusText.getText().toString() + state);
            } else if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                // Get the BluetoothDevice object from the Intent
                BluetoothDevice device = paramIntent
                        .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                // Add the name and address to an array adapter to show in a
                // ListView
                statusText.setText(statusText.getText().toString()
                        + device.getName() + "\n" + device.getAddress());
            } else if (("android.bluetooth.adapter.action.DISCOVERY_FINISHED"
                    .equals(action))) {
                if (MainActivity.this.mBtAdapter.isDiscovering()) {
                    MainActivity.this.mBtAdapter.cancelDiscovery();
                }
                statusText.setText("");
                MainActivity.this.mBtAdapter.startDiscovery();
            }
        }
    };
}
4

2 回答 2

1

您可以在它停止时调用 startDiscovery。在您的广播接收器中:

if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action))
{
    btAdapter.startDiscovery();
}
于 2013-12-15T18:01:14.940 回答
0

如果您想连接到不知道完整地址的设备,则必须使用完整的发现BluetoothAdapter.startDiscovery()并搜索接收到的地址以查找您想要的地址。

如果您知道要连接的设备的完整地址,则可以使用以下命令直接连接到该设备BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);

因此,通过直接使用.getRemoteDevice(address);,您可以保存扫描设备。而是直接连接...

例子:

BluetoothDevice device = BluetoothAdapter.getDefaultAdapter().getRemoteDevice("00:1C:4D:02:A6:55");

sock = device.createRfcommSocketToServiceRecord(UUID.fromString("8e1f0cf7-508f-4875-b62c-fbb67fd34812"));

然后sock.connect();等等..希望你明白了

于 2013-03-13T04:04:30.147 回答