Forum: Compiler & IDEs in PreferenceFragmentCompat Bluetooths Objekt öffnen Android Java


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Robert W. (Gast)


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

: Verschoben durch Moderator
von Sinkaraso (Gast)


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
                }

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.