in PreferenceFragmentCompat Bluetooths Objekt öffnen Android Java

Gast #7249871
Lesenswert?

Hey Leute,

Ich schreibe an einer App und komme da nicht so wirklich weiter.
Ich habe eine Klasse Namens SettingsFragmentForBLT die von 
PreferenceFragmentCompat ableitet. In Ihr behandle ich User Eingaben von 
onPreferenceChange. hier gibt es die Möglichkeit, Einstellungen für das 
Bluetooths Gerät vorzunehmen mit dem das Smartphone beim Aufrufen der 
Klasse schon gekoppelt ist. Die BLT Angelegenheiten Regel ich in der 
Klasse Namens DeviceControlActivity.

Ich muss DAS behandelnde Objekt aus DeviceControlActivity in der Klasse 
SettingsFragmentForBLT verfügbar machen, damit ich zum Zeitpunkt der 
Eingabe vom User die Daten an das BLT gerät übermitteln kann. Soweit ich 
weiß, muss ich dafür den Konstuktor der DeviceControlActivity überladen. 
Mein Versuch bezieht sich auf diese Webseite:
https://sciodoo.de/konstruktor-im-java-programm-ein-objekt-uebergeben/#

Hier der Code aus der SettingsFragmentForBLT Klasse:
1
     public static class SettingsFragmentForBLT extends PreferenceFragmentCompat  implements
2
                Preference.OnPreferenceChangeListener {
3
        @Override
4
        public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
5
            addPreferencesFromResource(R.xml.blt_preferences);
6

7
            // Mit einem Listener werden Einstellungsänderungen in PreferencFragmnt (BLT) überwacht
8
            Preference preferenceFeedbackIstAn = findPreference("FeedbackIstAn");
9
            preferenceFeedbackIstAn.setOnPreferenceChangeListener(this);
10

11
            Preference preferenceSwitchfeedback = findPreference("seek_bar_key");
12
            preferenceSwitchfeedback.setOnPreferenceChangeListener(this);
13
        }
14

15
        @Override
16
        public boolean onPreferenceChange(Preference preference, Object newValue) {
17
            String preferenceKey = preference.getKey();
18

19
            DeviceControlActivity deviceControlActivity = new DeviceControlActivity();
20
            DeviceControlActivity msBluetoothLeService = new  deviceControlActivity.getmBluetoothLeService(deviceControlActivity);
21

22
//            BluetoothLeService mBluetoothLeService
23

24

25
            Boolean switchOn = (boolean) newValue;
26

27
            if (preferenceKey.equals("FeedbackIstAn")) {
28
                deviceControlActivity.toggleLEDGren();
29
                Log.w(TAG, "preferenceValue:  " + newValue);
30

31
                if (switchOn) {
32
                    if (msBluetoothLeService != null) {
33
                        msBluetoothLeService.writeCustomCharacteristic(53);
34
                        Log.w(TAG, "Grün wurde eingeschaltet");
35
                    }
36
...

Hier der Code aus DeviceControlActivity:
1
public class DeviceControlActivity extends AppCompatActivity{
2

3
...
4
    public DeviceControlActivity(BluetoothLeService mBluetoothLeService) {
5
        this.mBluetoothLeService = mBluetoothLeService;//Zuweisung mit this
6
    }
7
   public void getmBluetoothLeService(DeviceControlActivity erstelltesObjekt){
8
        this.mBluetoothLeService = erstelltesObjekt.mBluetoothLeService;
9
    }
10
...

Ich danke für eure Unterstützung und wünsche eine angenehme Zeit
Gast #7280086
Lesenswert?

Ist leider lange her das ich sowas mit java gemacht habe und etwas spät 
dran  aber wie wäre es die Klasse DeviceControlActivity in der Klasse 
SettingsFragmentForBLT zu nutzen. dazu zuerst eine Instanz von 
DeviceControlActivity erstellen und dann die benötigte Methode aufrufen.

1
public static class SettingsFragmentForBLT extends PreferenceFragmentCompat  implements
2
            Preference.OnPreferenceChangeListener {
3
    // Klassenfeld für das mBluetoothLeService-Objekt
4
    private BluetoothLeService mBluetoothLeService;
5

6
    @Override
7
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
8
        addPreferencesFromResource(R.xml.blt_preferences);
9
        // Mit einem Listener werden Einstellungsänderungen in PreferencFragmnt (BLT) überwacht
10
        Preference preferenceFeedbackIstAn = findPreference("FeedbackIstAn");
11
        preferenceFeedbackIstAn.setOnPreferenceChangeListener(this);
12
        Preference preferenceSwitchfeedback = findPreference("seek_bar_key");
13
        preferenceSwitchfeedback.setOnPreferenceChangeListener(this);
14
    }
15

16
    @Override
17
    public boolean onPreferenceChange(Preference preference, Object newValue) {
18
        String preferenceKey = preference.getKey();
19
        DeviceControlActivity deviceControlActivity = new DeviceControlActivity();
20
        // Setzen Sie das mBluetoothLeService-Objekt auf das entsprechende Feld in der Klasse
21
        mBluetoothLeService = deviceControlActivity.getmBluetoothLeService(deviceControlActivity);
22
        Boolean switchOn = (boolean) newValue;
23
        if (preferenceKey.equals("FeedbackIstAn")) {
24
            deviceControlActivity.toggleLEDGren();
25
            Log.w(TAG, "preferenceValue:  " + newValue);
26
            if (switchOn) {
27
                if (mBluetoothLeService != null) {
28
                    mBluetoothLeService.writeCustomCharacteristic(53);
29
                    Log.w(TAG, "Grün wurde eingeschaltet");
30
                }
Gast #7350673
Lesenswert?

Es sieht so aus, als ob du versuchst, ein Objekt der Klasse DeviceControlActivity innerhalb der Klasse SettingsFragmentForBLT verfügbar zu machen. Hierfür musst du jedoch nicht den Konstruktor von DeviceControlActivity überladen. Stattdessen kannst du einfach eine Instanz von DeviceControlActivity in SettingsFragmentForBLT erstellen und auf ihre öffentlichen Methoden zugreifen.

Hier ist ein Beispiel, wie du das machen kannst:

In SettingsFragmentForBLT:

// Erstelle eine Instanz von DeviceControlActivity DeviceControlActivity deviceControlActivity = (DeviceControlActivity) getActivity();

// Rufe die öffentliche Methode toggleLEDGren auf deviceControlActivity.toggleLEDGren();

// Rufe die öffentliche Methode getmBluetoothLeService auf, um auf das Bluetooth-Service-Objekt zuzugreifen BluetoothLeService msBluetoothLeService = deviceControlActivity.getmBluetoothLeService();

// Schreibe Daten an das Bluetooth-Gerät msBluetoothLeService.writeCustomCharacteristic(53);

In DeviceControlActivity:

// Definiere eine öffentliche Methode, um das Bluetooth-Service-Objekt zurückzugeben public BluetoothLeService getmBluetoothLeService() { return mBluetoothLeService; }

Hinweis: Stelle sicher, dass die Instanz von DeviceControlActivity in SettingsFragmentForBLT nicht null ist, bevor du auf ihre Methoden zugreifst. Du solltest auch sicherstellen, dass das Bluetooth-Gerät korrekt verbunden und gekoppelt ist, bevor du versuchst, Daten an das Gerät zu senden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren