2013-02-09 3 views
1

Я пытаюсь слушать события соединения Bluetooth/разъединения, чтобы определить, подключено ли Bluetooth-устройство. Я пытаюсь сделать это таким образом, чтобы мое приложение работало на старых версиях Android.Как узнать, подключено ли устройство Bluetooth? Мой код не работает

Я зарегистрировал приемник в манифесте как таковой:

<receiver 
     android:name=".BluetoothReceiver"> 
     <intent-filter> 
      <action android:name="android.bluetooth.device.action.ACL_CONNECTED" /> 

     </intent-filter> 
</receiver> 

И в моем классе BluetoothReceiver меня

public class BluetoothReceiver extends BroadcastReceiver{ 
public final static String TAG = "BluetoothReciever"; 

public void onReceive(Context context, Intent intent) 
{ 

    Log.d(TAG, "Bluetooth Intent Recieved"); 

    final BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
    String action = intent.getAction(); 

    if (BluetoothDevice.ACTION_ACL_CONNECTED.equalsIgnoreCase(action)) 
    { 
     Log.d(TAG, "Connected to " + device.getName()); 
    } 

    if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equalsIgnoreCase(action)) 
    { 
     Log.d(TAG, "Disconnected from " + device.getName()); 
    } 
}} 

Но при подключении и отключении от Bluetooth, ничего не происходит. Что я делаю не так?

+0

Если для Bluetooth-гарнитуры см мой ответ на http://stackoverflow.com/questions/14991158/using-the-android-recognizerintent-with-a-bluetooth-headset/14993590#14993590 –

ответ

0

Вы должны манипулировать MODIFY_AUDIO_SETTINGS для правильного пальца, если подключена Bluetooth-гарнитура. После того как вы правильно определили свои намерения и правильно настроили свой манифест, он должен работать. Это для разъема для наушников, но оно может быть применено к Bluetooth, если вы используете вышеупомянутое.

Вот два сайта, которые могут помочь объяснить это более подробно:

  1. http://www.grokkingandroid.com/android-tutorial-broadcastreceiver/
  2. http://www.vogella.com/articles/AndroidBroadcastReceiver/article.html

Вы должны определить свое намерение; в противном случае он не получит доступ к системной функции. Вещательный приемник; будет предупреждать о вашем приложении изменений, которые вы хотите прослушать.

Каждый приемник должен быть подклассифицирован; он должен содержать onReceive(). Для реализации onReceive() вам необходимо создать метод, который будет включать в себя два элемента: Context & Intent.

Скорее всего, услуга была бы идеальной; но вы создадите сервис и определите свой контекст через него. В контексте; вы определите свое намерение.

Пример:

context.startService 
     (new Intent(context, YourService.class)); 

Очень простой пример. Однако; ваша конкретная цель - использовать широковещательную передачу по всей системе. Вы хотите, чтобы ваша заявка была извещена о Intent.ACTION_HEADSET_PLUG.

Как подписаться через манифест:

<receiver 
    android:name="AudioJackReceiver" 
    android:enabled="true" 
    android:exported="true" > 
    <intent-filter> 
     <action android:name="android.intent.action.HEADSET_PLUG" /> 
    </intent-filter> 
</receiver> 

Или вы можете просто определить с помощью вашего приложения; но. Ваш конкретный запрос; потребуются права пользователя, если вы намерены обнаружить Bluetooth MODIFY_AUDIO_SETTINGS.


Update:

я неправильно понял ваш вопрос, я думал, что вы пытаетесь найти Bluetooth гарнитуры; не только Bluetooth - это Paired.

Сверх этого question; они объясняют, как проверить на Paired Bluetooth Devices.

  1. Импорт пакета Bluetooth.

    import android.bluetooth.*;

  2. Установите разрешение.

    <uses-permission android:name="android.permission.BLUETOOTH" />

  3. Доступ к Bluetooth-адаптер:

    BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();

  4. Выполнить проверку, что соединение не null.

    если (bluetooth! = Null) { // Сделаем что-нибудь. }

  5. Убедитесь, что он включен:

    if (bluetooth.isEnabled()) { // Enabled, do some work with Bluetooth } else { // Not Enabled Do something else. }

  6. отображения состояния Bluetooth BluetoothAdapter.getState()

По умолчанию выключено; поэтому вам придется включить его.

string state = bluetooth.getState(); 
status = deviceName + " : " + deviceLocation + " : " + deviceState; 
Смежные вопросы