poofklats Δημοσ. 16 Αυγούστου 2019 Δημοσ. 16 Αυγούστου 2019 (επεξεργασμένο) Καλησπέρα σε όλους, Εδώ και 2 μέρες παλεύω να βρω συσκευές paired ή και όχι, μέσω μιας dummy εφαρμογής δίχως αποτέλεσμα. Πιο συγκεκριμένα έχω τρέξει ότι σχετικό κώδικα μπόρεσα να βρω και έχω βάλει όλα τα permissions που θεωριτικά χρειάζεται η εφαρμογή για να δουλέψει <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> Κι ενώ το bluetooth των κινητών που δοκίμασα την εφαρμογή δουλεύουν απροβλημάτιστα, η εφαρμογή μου δίνει 0 συσκευές στα .getBondedDevices και .startDiscovery. Παρακάτω ο κώδικας που χρησιμοποιώ: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="16dp" tools:context=".MainActivity"> <CheckBox android:id="@+id/enable" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Enable bt!" android:textStyle="bold" android:layout_centerHorizontal="true"/> <ListView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/listview" android:layout_below="@id/enable" /> </RelativeLayout> package com.example.myapplication; import android.Manifest; 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.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.ListView; import android.widget.Toast; import java.util.ArrayList; import java.util.Set; public class MainActivity extends AppCompatActivity { CheckBox enable; ListView listView; BluetoothAdapter btAdapter; BroadcastReceiver broadcastReceiver; ArrayList<String> devices; ArrayAdapter arrayAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); enable = (CheckBox) findViewById(R.id.enable); listView = (ListView) findViewById(R.id.listview); devices = new ArrayList<String>(); btAdapter = BluetoothAdapter.getDefaultAdapter(); if (btAdapter == null) { Toast.makeText(this, "Bluetooth not available", Toast.LENGTH_SHORT).show(); finish(); } if (btAdapter.isEnabled()) { enable.setChecked(true); } enable.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (!isChecked) { btAdapter.disable(); Toast.makeText(MainActivity.this, "Turned off", Toast.LENGTH_SHORT).show(); } else { int MY_PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION = 1; ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION); Intent intentOn = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(intentOn, 0); Toast.makeText(MainActivity.this, "Turned On", Toast.LENGTH_SHORT).show(); Intent getVisible = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); startActivityForResult(getVisible, 0); Toast.makeText(MainActivity.this, "Visibility On", Toast.LENGTH_SHORT).show(); btAdapter.startDiscovery(); broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (BluetoothDevice.ACTION_FOUND.equals(action)) { BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); devices.add(device.getName()); arrayAdapter.notifyDataSetChanged(); } } }; IntentFilter intentFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND); registerReceiver(broadcastReceiver, intentFilter); arrayAdapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, devices); listView.setAdapter(arrayAdapter); } } }); } } Έχετε καμία ιδέα; Σας έχει τύχει κάτι παρόμοιο; Επεξ/σία 16 Αυγούστου 2019 από poofklats
marios28 Δημοσ. 16 Αυγούστου 2019 Δημοσ. 16 Αυγούστου 2019 Δεν έχω εγκατεστημένο το android studio για να το δοκιμάσω, ούτε έχω ασχοληθεί στο android με bluetooth, αλλά πιθανόν, έτσι όπως είδα τον κώδικά σου και ψάχνοντας στα γρήγορα: Βάλε τις παρακάτω εντολές αμέσως μόλις ανοίγει η else (στην onCheckedChanged) if(!btAdapter.isEnabled()) { btAdapter.enable(); }
poofklats Δημοσ. 18 Αυγούστου 2019 Μέλος Δημοσ. 18 Αυγούστου 2019 Στις 16/8/2019 στις 10:02 ΜΜ, marios28 είπε Δεν έχω εγκατεστημένο το android studio για να το δοκιμάσω, ούτε έχω ασχοληθεί στο android με bluetooth, αλλά πιθανόν, έτσι όπως είδα τον κώδικά σου και ψάχνοντας στα γρήγορα: Βάλε τις παρακάτω εντολές αμέσως μόλις ανοίγει η else (στην onCheckedChanged) if(!btAdapter.isEnabled()) { btAdapter.enable(); } Intent intentOn = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(intentOn, 0); Αυτό το κομμάτι αναλαμβάνει να κάνει enable. Εν τέλει αφαιρόντας το enable (προϋποθέτει να είναι ήδη ανοιχτό το bluetooth), ο κώδικας τρέχει κανονικά οπότε 'όλα καλά'. Για όποιον τυχόν ενδιαφέρεται, υποθέτω ότι το όλο πρόβλημα προκύπτει από κάποια καθυστέρηση του bluetoothAdapter να συνδεθεί, οπότε και επιστρέφει null στις 2 λίστες (discovery και pairedDevices)
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα