Προς το περιεχόμενο
  • 0
Συνδεθείτε  
poofklats

Android Studio και Bluetooth Connection

Ερώτηση

Δημοσ. (επεξεργασμένο)

Καλησπέρα σε όλους,

Εδώ και 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);
                }
            }
        });

    }
}

 

Έχετε καμία ιδέα; Σας έχει τύχει κάτι παρόμοιο;

Επεξ/σία από poofklats

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

2 απαντήσεις σε αυτή την ερώτηση

Προτεινόμενες αναρτήσεις

  • 0

Δεν έχω εγκατεστημένο το android studio για να το δοκιμάσω, ούτε έχω ασχοληθεί στο android με bluetooth, αλλά πιθανόν, έτσι όπως είδα τον κώδικά σου και ψάχνοντας στα γρήγορα:

Βάλε τις παρακάτω εντολές αμέσως μόλις ανοίγει η else (στην onCheckedChanged)

if(!btAdapter.isEnabled()) 
{  
  btAdapter.enable(); 
}

 

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0
Στις 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)

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε έναν λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι εύκολο!

Εγγραφείτε για έναν νέο λογαριασμό

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
Συνδεθείτε  
×
×
  • Δημιουργία νέου...

Χρήσιμες πληροφορίες

Με την περιήγησή σας στο insomnia.gr, αποδέχεστε τη χρήση cookies που ενισχύουν σημαντικά την εμπειρία χρήσης.