2016-04-06 9 views
2

Ich entwickle eine App für ein Projekt. Es benutzt Bluetooth. Ich folgte den Schritten für das Einrichten von Bluetooth von der Google-Entwickler-Seite. Ich habe die Phase erreicht, in der ich die Auffindbarkeit erreiche. Das Problem ist, dass ich die Geräte in einer Listenansicht anzeigen möchte und sie nicht angezeigt werden. Vielleicht kann jemand auf meine Tollpatschigkeit hinweisen, da ich das Problem nicht sehen kann.Bluetooth Probleme mit meiner App

public class MainActivity extends AppCompatActivity { 
    private final static int REQUEST_ENABLE_BT = 1; 
    Set<BluetoothDevice> pairedDevices; 
    ArrayAdapter<String> deviceAdapter; 
    ArrayList<String> list; 
    ListView listView; 
    BroadcastReceiver mReceiver; 
    Intent discoverableIntent; 
    IntentFilter intentFilter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     listView = (ListView) findViewById(R.id.devices); 
     list = new ArrayList<>(); 
     deviceAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, list); 
     listView.setAdapter(deviceAdapter); 

     BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
     if (bluetoothAdapter == null) 
      Toast.makeText(this, "Bluetooth is not supported!", Toast.LENGTH_SHORT).show(); 
     else { 
      if (!bluetoothAdapter.isEnabled()) { 
       Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
       startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); 
      } 
     } 

     if (bluetoothAdapter != null) { 
      pairedDevices = bluetoothAdapter.getBondedDevices(); 
     } 
     if (pairedDevices.size() > 0) { 
      for (BluetoothDevice device : pairedDevices) { 
       deviceAdapter.add(device.getName() + "\n" + device.getAddress()); 
      } 
     } 

     mReceiver = 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); 
        deviceAdapter.add(device.getName() + "\n" + device.getAddress()); 
        Log.d("BT", device.getName() + "\n" + device.getAddress()); 
       } 
      } 
     }; 
     intentFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND); 
     registerReceiver(mReceiver, intentFilter); 

     if (bluetoothAdapter.isDiscovering()) { 
     bluetoothAdapter.cancelDiscovery(); 
    } 
    bluetoothAdapter.startDiscovery(); 



     // ATTENTION: This was auto-generated to implement the App Indexing API. 
     // See https://g.co/AppIndexing/AndroidStudio for more information. 
    } 

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.szili.bluetoothclient.MainActivity"> 

    <ListView 
     android:id="@+id/devices" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 

    </ListView> 
</LinearLayout> 


<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.szili.bluetoothclient"> 
    <uses-permission android:name="android.permission.BLUETOOTH" /> 
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <!-- ATTENTION: This was auto-generated to add Google Play services to your project for 
      App Indexing. See https://g.co/AppIndexing/AndroidStudio for more information. --> 
     <meta-data 
      android:name="com.google.android.gms.version" 
      android:value="@integer/google_play_services_version" /> 
    </application> 

</manifest> 
+0

Fügen Sie das Manifest hinzu. Hast du BT Erlaubnis? – morynicz

+0

Ja. Entschuldigung, dass das Manifest nicht eingeschlossen wurde. –

Antwort

1

Sie haben vergessen, Geräte zu scannen:

// Create a BroadcastReceiver for ACTION_FOUND 
private final BroadcastReceiver mReceiver = 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 address to an array adapter to show in a ListView 
      mArrayAdapter.add(device.getName() + "\n" + device.getAddress()); 
     } 
    } 
}; 
// Register the BroadcastReceiver 
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); 
registerReceiver(mReceiver, filter); // Don't forget to unregister during onDestroy 

Geräte entdecken zu starten, rufen Sie einfach startDiscovery() Von: http://developer.android.com/intl/es/guide/topics/connectivity/bluetooth.html

+0

Also im Grunde rufe ich startDiscovery() bevor ich den Broadcast-Empfänger erstellen? –

+1

Sie sollten startDiscovery() nach dem Erstellen des Broadcast-Empfängers, wenn Sie einen Listener für ein Gerät entdeckt haben wollen –

+0

Immer noch keine Geräte in der Listenansicht angezeigt werden. –

1

Nach einigen Recherchen, um herauszufinden, ich war in der Lage, was das Problem war. Im Grunde musste ich mit Android Marshmallow meiner App eine Location-Berechtigung erteilen, sonst konnte ich nicht nach Geräten in der Nähe suchen.

Verwandte Themen