2013-03-11 6 views
1

В соответствии с методом BluetoothAdapter.startDiscovery() процесс обнаружения обычно включает в себя сканирование запросов около 12 секунд. Есть ли что-то, что позволяет сократить время сканирования запроса (менее 12 секунд)?Изменение времени сканирования запроса Bluetooth

Это мой 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(); 
      } 
     } 
    }; 
} 
+0

Я не думаю, что у вас есть контроль над этим, поскольку протокол обнаружения Bluetooth требует времени для сканирования ближайших устройств, которые являются частью стека Bluetooth. – iTech

+0

Возможно, есть ли какой-либо вариант, когда Bluetooth обнаружит первое устройство, он может перестать сканировать? или начать манипулировать первым обнаруженным устройством, пока Bluetooth продолжает сканировать? спасибо –

+0

Если вы хотите подключиться к определенному устройству, вы можете сохранить его адрес mac и напрямую подключиться без сканирования – iTech

ответ

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(); и т.д .. надеюсь, что вы получили это

0

Вы можете позвонить startDiscovery, когда он останавливается. В приемнике вашего приемника:

if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) 
{ 
    btAdapter.startDiscovery(); 
} 
Смежные вопросы