volver vincular samsung reparar puedo porque funciona dispositivos dispositivo detecta conectar como celular actualizar android bluetooth receiver

vincular - Android: el descubrimiento de Bluetooth no encuentra ningún dispositivo



porque no puedo vincular mi bluetooth (2)

Actualmente estoy trabajando en una pequeña aplicación para comenzar con los servicios que puede proporcionar la API Bluetooth de Android.

Editar -> Respuesta:

Parece que el problema se debió a los dispositivos Nexus 5 específicos. Parece que su receptor bluetooth no funciona bien. La solución a continuación debería funcionar para otros dispositivos.

Observación:

  1. He leído la documentación aquí: http://developer.android.com/guide/topics/connectivity/bluetooth.html , así como el siguiente código fuente de este tutorial http://www.londatiga.net/it/programming/android/how-to-programmatically-scan-or-discover-android-bluetooth-device/ ubicado en github bajo / lorensiuswlt / AndroBluetooth

  2. He finalizado casi todas las funciones que me interesaron (como verificar la existencia del adaptador, habilitar / deshabilitar el blueooth, consultar divisiones emparejadas, configurar el adaptador visible).

Problema:

En realidad, no se encuentra ningún dispositivo cuando ejecuto el método .onDiscovery (), aunque los dispositivos se encuentran desde Configuración / Bluetooth en mi Nexus 5.

Así es como lo manejo:

public class MainActivity extends AppCompatActivity { private BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); ... protected void onCreate(Bundle savedInstanceState) { IntentFilter filter = new IntentFilter(); filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED); filter.addAction(BluetoothDevice.ACTION_FOUND); filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED); filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); registerReceiver(mReceiver, filter); }

El filtro está funcionando bien hasta donde pude probar, es decir, ACTION_STATE_CHANGED (en habilitación de bluetooth) y los dos ACTION_DISCOVERY _ ***.

El siguiente método es entonces llamado con éxito:

public void onDiscovery(View view) { mBluetoothAdapter.startDiscovery(); }

Y luego tengo mi receptor bluetooth:

private final BroadcastReceiver mReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) { final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR); if (state == BluetoothAdapter.STATE_ON) { showToast("ACTION_STATE_CHANGED: STATE_ON"); } } else if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) { mDeviceList = new ArrayList<>(); showToast("ACTION_DISCOVERY_STARTED"); mProgressDlg.show(); } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action) && !bluetoothSwitchedOFF) { mProgressDlg.dismiss(); showToast("ACTION_DISCOVERY_FINISHED"); Intent newIntent = new Intent(MainActivity.this, DeviceListActivity.class); newIntent.putParcelableArrayListExtra("device.list", mDeviceList); startActivity(newIntent); } else if (BluetoothDevice.ACTION_FOUND.equals(action)) {// When discovery finds a device // Get the BluetoothDevice object from the Intent BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); mDeviceList.add(device); showToast("Device found = " + device.getName()); } } };

No tengo ningún problema al salir del logcat y no noté ningún problema durante la prueba que hice. El único problema es que no se descubre ningún dispositivo al final de la exploración, cuando hay muchos dispositivos detectables disponibles.

Intenté no poner demasiado código para no inundar el tema. Pregúntame si necesitas más.

Gracias por leerme, y gracias de antemano por sus respuestas.


¿En qué versión de Android está ejecutando esto? Si es Android 6.x, creo que necesita agregar el permiso ACCESS_COURSE_LOCATION a su manifiesto. Por ejemplo:

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

Tuve un problema similar y esto me lo arregló.

ACTUALIZACIÓN: Agregar documentación directamente de Google sobre esto:

Para acceder a los identificadores de hardware de dispositivos externos cercanos a través de Bluetooth y exploraciones de Wi-Fi, su aplicación ahora debe tener los permisos ACCESS_FINE_LOCATION o ACCESS_COARSE_LOCATION


Poco tarde en la fiesta, pero esto puede ser útil para otras personas.

Tienes que hacer dos cosas

  1. Agregue <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

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

a tu AndroidManifest.xml

  1. Asegúrate de solicitar el permiso en tiempo de ejecución también para dispositivos con Android 6.0 utilizando algo como esto

    int MY_PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION = 1; ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, MY_PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION);

    justo antes de mBluetoothAdapter.startDiscovery();

Si no realiza el paso 2, no podrá obtener ninguna información del identificador de hardware en el dispositivo con Android> = 6.0

ACTUALIZACIÓN / EDICIÓN:
Ejemplo con la versión de Android de verificación y alerta de diálogo como advertencia

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // Only ask for these permissions on runtime when running Android 6.0 or higher switch (ContextCompat.checkSelfPermission(getBaseContext(), Manifest.permission.ACCESS_COARSE_LOCATION)) { case PackageManager.PERMISSION_DENIED: ((TextView) new AlertDialog.Builder(this) .setTitle("Runtime Permissions up ahead") .setMessage(Html.fromHtml("<p>To find nearby bluetooth devices please click /"Allow/" on the runtime permissions popup.</p>" + "<p>For more info see <a href=/"http://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-hardware-id/">here</a>.</p>")) .setNeutralButton("Okay", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (ContextCompat.checkSelfPermission(getBaseContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(DeviceListActivity.this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_ACCESS_COARSE_LOCATION); } } }) .show() .findViewById(android.R.id.message)) .setMovementMethod(LinkMovementMethod.getInstance()); // Make the link clickable. Needs to be called after show(), in order to generate hyperlinks break; case PackageManager.PERMISSION_GRANTED: break; } }