# Android Studio Bluetooth App Problem



## SeboSapienz (29. Feb 2016)

Hallo,
ich habe ein Problem mit meiner Bluetooth App.
Es ist im Grunde nur eine App, die eine Zahl per Bluetooth verschicken soll.
Eigentlich funktioniert fast alles, bis auf eine Stelle.


```
mLangsamer.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v){
        View view = getView();
        if (null != view) {
            TextView textView = (TextView) view.findViewById(R.id.edit_text_out);
            textView.setText("2");
            String message = textView.getText().toString();
            sendMessage(message);
        }
    }
});
```

Wenn ich diese Ausklammer funktioniert dass Programm, wenn ich diese Stelle nicht Auskommentiere gibt es zwar keinen Error in Android Studio, aber die App stürzt auf dem Handy beim öffnen ab.

Hier ist noch der Fehlercode den ich vom debuggen bekommen habe, allerdings kann ich nichts damit anfangen.

02-29 23:51:11.720 21152-21152/? E/ActivityThread: Activity com.example.android.bluetoothchat.DeviceListActivity has leaked IntentReceiver android.view.ViewRootImpl$1@410b9b88 that was originally registered here. Are you missing a call to unregisterReceiver()?
  android.app.IntentReceiverLeaked: Activity com.example.android.bluetoothchat.DeviceListActivity has leaked IntentReceiver android.view.ViewRootImpl$1@410b9b88 that was originally registered here. Are you missing a call to unregisterReceiver()?
  at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:763)
  at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:567)
  at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1043)
  at android.app.ContextImpl.registerReceiver(ContextImpl.java:1030)
  at android.app.ContextImpl.registerReceiver(ContextImpl.java:1024)
  at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:341)
  at android.view.ViewRootImpl.<init>(ViewRootImpl.java:391)
  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:267)
  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:215)
  at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:140)
  at android.view.Window$LocalWindowManager.addView(Window.java:537)
  at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2507)
  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1986)
  at android.app.ActivityThread.access$600(ActivityThread.java:123)
  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
  at android.os.Handler.dispatchMessage(Handler.java:99)
  at android.os.Looper.loop(Looper.java:137)
  at android.app.ActivityThread.main(ActivityThread.java:4424)
  at java.lang.reflect.Method.invokeNative(Native Method)
  at java.lang.reflect.Method.invoke(Method.java:511)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
  at dalvik.system.NativeStart.main(Native Method)

Ich hoffe auf hilfe grüße Sebo


----------



## Joose (1. Mrz 2016)

Wie bist du auf die Idee gekommen,  dass es sich um beim Hinzufügen des Listeners um die Fehlerquelle handelt? Laut StackTrace weißt gar nichts auf diesen Code hin.

Die Fehlermessage an sich ist ja eindeutig: Android erwartet das die Receiver registriert sind 
Eine mögliche Fehlerbehandlung dazu gäbe es hier: http://stackoverflow.com/questions/...-are-you-missing-a-call-to-unregisterreceiver
Für mich hat eben diese Fehlermeldung wenig bis gar nicht mit dem von der geposteten Codestück zu tun :/

Anmerkung: Code bitte immer in Code-Tags packen
[java] .. dein code .. [/java]


----------



## SeboSapienz (1. Mrz 2016)

Danke erstmal für deinen Kommentar.
Ich denke dass mein obiger ausschnitt die fehlerquelle ist, da die app funktioniert wenn ich diesen entfehrne.
Aber trotzdem danke für deinen Beitrag ich werde es ausprobieren


----------



## SeboSapienz (1. Mrz 2016)

ich habe in meinem Programm nachgeguckt und die receiver sind declariert:
	
	
	
	





```
..
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    @Override
    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);
            // If it's already paired, skip it, because it's been listed already
            if (device.getBondState() != BluetoothDevice.BOND_BONDED) {
                mNewDevicesArrayAdapter.add(device.getName() + "\n" + device.getAddress());
            }
            // When discovery is finished, change the Activity title
        } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
            setProgressBarIndeterminateVisibility(false);
            setTitle(R.string.select_device);
            if (mNewDevicesArrayAdapter.getCount() == 0) {
                String noDevices = getResources().getText(R.string.none_found).toString();
                mNewDevicesArrayAdapter.add(noDevices);
            }
        }
    }
};..
```

und werden auch registriert:
	
	
	
	





```
..
// Register for broadcasts when a device is discovered
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
this.registerReceiver(mReceiver, filter);

// Register for broadcasts when discovery has finished
filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
this.registerReceiver(mReceiver, filter);..
```

hoffe dass du mir helfen kannst


----------



## InfectedBytes (1. Mrz 2016)

das problem ist das du sie nie wieder entfernst. 


> com.example.android.bluetoothchat.DeviceListActivity has leaked IntentReceiver android.view.ViewRootImpl$1@410b9b88 that was originally registered here. *Are you missing a call to unregisterReceiver()?*


----------



## SeboSapienz (1. Mrz 2016)

und wo müsste des "ausregistrieren" hin? in die onCreate methode oder in eine andere


----------



## SeboSapienz (1. Mrz 2016)

hab hier noch was gefunden:
	
	
	
	





```
..
protected void onDestroy() {
    super.onDestroy();

    // Make sure we're not doing discovery anymore
    if (mBtAdapter != null) {
        mBtAdapter.cancelDiscovery();
    }

    // Unregister broadcast listeners
    this.unregisterReceiver(mReceiver);
}..
```

vieleicht liegt der fehler darin, dass das Programm nicht diese Methode durchläuft.
Aber müsste das Programm nicht trotzdem funktionieren?


----------

