2017-12-24 7 views
0

Ich lerne über Bluetooth-Apps und die erste Probe, die ich gefunden habe, scheint gut dokumentiert zu sein, aber ich kann nicht für das Leben von mir bekommen es zu reproduzieren die "Search Devices" Teil, jede Hilfe würde sehr geschätzt werden.Ermitteln von Bluetooth-Beispiel

public class MainActivity extends AppCompatActivity { 

private Button onBtn, offBtn, listBtn, findBtn; 
private TextView text; 
private ListView myListView; 

// Bluetooth global variables 
private static final int REQUEST_ENABLE_BT = 1; 
private BluetoothAdapter myBluetoothAdapter; 
public Set<BluetoothDevice> pairedDevices; 
private ArrayAdapter<String> BTArrayAdapter; 
@Override 


protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

     myBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 

     if(myBluetoothAdapter == null) { 
      Toast.makeText(getApplicationContext(),"Your device does not support Bluetooth", 
        Toast.LENGTH_LONG).show(); 
     } 
     else 
     { 

      text = (TextView) findViewById(R.id.text); 
      onBtn = (Button)findViewById(R.id.turnOn); 
      offBtn = (Button)findViewById(R.id.turnOff); 
      listBtn = (Button)findViewById(R.id.paired); 
      findBtn = (Button)findViewById(R.id.search); 

      myListView = (ListView)findViewById(R.id.listView1); 

      // create the arrayAdapter that contains the bluetooth d evices, and set it to the ListView 
      BTArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); 
      myListView.setAdapter(BTArrayAdapter); 

      myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
        String selectedFromList =(String) (myListView.getItemAtPosition(i)); 
        Toast.makeText(getApplicationContext(),"Bluetooth remote device : " + selectedFromList, 
          Toast.LENGTH_LONG).show(); 
       } 
      }); 



     } 

    } // onCreate 


public void on(View view){ 
    if (!myBluetoothAdapter.isEnabled()) { 
     Intent turnOnIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
     startActivityForResult(turnOnIntent, REQUEST_ENABLE_BT); 

     Toast.makeText(getApplicationContext(),"Bluetooth turned on" , 
       Toast.LENGTH_LONG).show(); 
    } 
    else{ 
     Toast.makeText(getApplicationContext(),"Bluetooth is already on", 
       Toast.LENGTH_LONG).show(); 
    } 
} 

public void off(View view){ 
    myBluetoothAdapter.disable(); 
    text.setText("Status: Disconnected"); 

    Toast.makeText(getApplicationContext(),"Bluetooth turned off", 
      Toast.LENGTH_LONG).show(); 
} 

public void list(View view){ 
    // get paired devices 
    pairedDevices = myBluetoothAdapter.getBondedDevices(); 

    // put it's one to the adapter 
    for(BluetoothDevice device : pairedDevices) 
     BTArrayAdapter.add(device.getName()+ "\n" + device.getAddress()); 

    Toast.makeText(getApplicationContext(),"Show Paired Devices", 
      Toast.LENGTH_SHORT).show(); 

} 

final BroadcastReceiver bReceiver = new BroadcastReceiver() { 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     // When discovery finds a device 
     if (BluetoothDevice.ACTION_FOUND.equals(action)) { 
      // Get the BluetoothDevice object from the Intent 
      BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
      // add the name and the MAC address of the object to the arrayAdapter 
      BTArrayAdapter.add(device.getName() + "\n" + device.getAddress()); 
      BTArrayAdapter.notifyDataSetChanged(); 
     } 
    } 
}; 

public void find(View view) { 
    if (myBluetoothAdapter.isDiscovering()) { 
     // the button is pressed when it discovers, so cancel the discovery 
     Toast.makeText(getApplicationContext(),"Bluetooth cancelled discovery" , 
       Toast.LENGTH_LONG).show(); 
     myBluetoothAdapter.cancelDiscovery(); 
    } else { 
     BTArrayAdapter.clear(); 
     Toast.makeText(getApplicationContext(),"Bluetooth discovery started" , 
       Toast.LENGTH_LONG).show(); 

     myBluetoothAdapter.startDiscovery(); 

     registerReceiver(bReceiver, new IntentFilter(BluetoothDevice.ACTION_FOUND)); 
    } 

} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
} 

} 

Mit einem Oneplus3 & 2 dies zu testen, und weder Gerät die anderen finden können, es sei denn bereits miteinander gepaart. Ich möchte sehen, ob ich suchen kann und das Gerät in einer Liste auffüllen kann, wie es die gekoppelten Geräte bereits tun.

Wenn es noch etwas gibt, dass du mich brauchst, lass es mich wissen, ich hoffe, es macht dir nichts aus, dir die Zeit zu nehmen, um mit ihm auszuhelfen!

+0

Ich empfehle die Verwendung eines bekannten Bluetooth-Beispiel wie: https://github.com/googlesamples/android-BluetoothChat und bekommen das funktioniert, so dass Sie es nicht die Geräte kennen. –

+0

Danke Ich werde sicher sein, es zu überprüfen, ich wollte nur sicherstellen, dass es kein Problem mit dem Rundfunkempfänger oder etwas kleines, das ich fehlte, es wird einfach keine Bluetooth-Geräte in der Nähe finden –

Antwort

0

Sie müssen Ihre Manifest.xml eine der folgenden Berechtigung zum Hinzufügen finden Geräte:

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

oder

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

Wenn Sie auf API 23 arbeiten und höher Sie müssen dies gewährleisten Erlaubnis wird gewährt, weil es eine gefährliche Stufengenehmigung ist.

Ab Android 6.0 (API-Ebene 23), gewähren Benutzern Berechtigungen für Anwendungen, während die App ausgeführt wird, nicht, wenn sie die App

Siehe this guide installieren Erlaubnis zu beantragen (s).