Netzwerk Verbindungen Java Android

wer112

Top Contributor
Sehr geehrtes Java Forum,

Ich muss vom Nutzer, wenn dieser Geld im App Store Geldsenden will, Daten speichern. Mir wurde gesagt, was ich darf.
Darunter möchte ich, gerne den WLAN-Namen, sowie die Stärke von verbundenen Internet speichern. Leider kommt es falsch in die Datenbank.

Wie bekomme ich den richtigen WLAN-Namen, mit dem ich verbunden bin?
Wie bekomme ich die genaue Stärke hin? (AKtuell kommt in die DB nur 'ne 2 rein, bei vollen Balken?)

Wie bekomme ich den Internetprovider raus(für WIFI bzw. Mobile(O2, Telekom, Vodafone,..)?

Mein Code für das Senden und des Netzwerkes:

Java:
ConnectivityManager cm =
                (ConnectivityManager)getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);

        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        boolean isConnected = activeNetwork != null &&
                activeNetwork.isConnectedOrConnecting();

        if (isConnected == false){
            errorText.setText("Keine Internetverbindung!");

        }else if(isConnected == true){


            boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;
            boolean isMobile = activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE;
            boolean isVPN = activeNetwork.getType() == ConnectivityManager.TYPE_VPN;

            boolean vpnCheck = cm.getNetworkInfo(ConnectivityManager.TYPE_VPN).isConnectedOrConnecting();



            if(isWiFi == true){
                errorText.setText("WIFI");

                WifiManager wifiMgr = (WifiManager)getActivity().getApplicationContext().getSystemService(Context.WIFI_SERVICE);
                WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
                wifi_name = wifiInfo.getSSID();

                int numberOfLevels = 5;
                int wifi_level = WifiManager.calculateSignalLevel(wifiInfo.getRssi(), numberOfLevels);

                wifi_stearke = "" + wifi_level;

                if (vpnCheck == true){
                    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AlertDialogTheme);
                    View view = LayoutInflater.from(getActivity()).inflate(R.layout.layout_error_dialog, getView().findViewById(R.id.layoutDialogContainer));


                    builder.setView(view);
                    ((TextView) view.findViewById(R.id.textTitle)).setText("VPN ist an!");
                    ((TextView) view.findViewById(R.id.textView_error)).setText("Du kannst kein Geld mit VPN versenden!\n\nBitte deaktiviere Sie die VPN-Verbindung.\n\nUnd probieren Sie es erneut.\n\n");
                    ((Button) view.findViewById(R.id.buttonAction)).setText(getString(R.string.okay));
                    ((ImageView) view.findViewById(R.id.image_error)).setImageResource(R.drawable.ic_error);

                    final AlertDialog alertDialog = builder.create();
                    alertDialog.setCancelable(false);

                    view.findViewById(R.id.buttonAction).setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            progressDialog.dismiss();
                            alertDialog.dismiss();

                        }
                    });

                    if (alertDialog.getWindow() != null) {
                        alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));
                    }


                    alertDialog.show();


                }else if (vpnCheck == false){
                    netzwerkart = "wifi";
                    Absenden();
                }

            }else if(isWiFi == false){

                if (isMobile == true){


                    if (vpnCheck == true){
                        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AlertDialogTheme);
                        View view = LayoutInflater.from(getActivity()).inflate(R.layout.layout_error_dialog, getView().findViewById(R.id.layoutDialogContainer));


                        builder.setView(view);
                        ((TextView) view.findViewById(R.id.textTitle)).setText("VPN ist an!");
                        ((TextView) view.findViewById(R.id.textView_error)).setText("Du kannst kein Geld mit VPN versenden!\n\nBitte deaktiviere die VPN-Verbinndung,\nund probieren Sie es erneut.");
                        ((Button) view.findViewById(R.id.buttonAction)).setText(getString(R.string.okay));
                        ((ImageView) view.findViewById(R.id.image_error)).setImageResource(R.drawable.ic_error);

                        final AlertDialog alertDialog = builder.create();
                        alertDialog.setCancelable(false);

                        view.findViewById(R.id.buttonAction).setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                progressDialog.dismiss();
                                alertDialog.dismiss();

                            }
                        });

                        if (alertDialog.getWindow() != null) {
                            alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));
                        }


                        alertDialog.show();


                    }else if (vpnCheck == false){
                        netzwerkart = "mobil";
                        Absenden();

                    }

                }else if(isMobile == false){
                    errorText.setText("Netzwerk Fehler!");
                }
            }

Ich bedanke mich im Vorraus 😉
 
Hi,

ich habe vor kurzem zufällig auch eine App gemacht, die mir die Signalstärke vom WLAN anzeigen soll. Im Prinzip mach ich das da auf dieselbe Weise wie du, nur dass mein numLevels = 7 ist.

Wenn ich mich richtig erinnere, hatte ich beim ersten Versuch auch das Problem, dass die ausgegebene Stärke nicht passte. Ich habe dann die Zeile mit dem calculate so geändert, dass ich nicht ein vorher gesetztes "wifiInfo" Objekt genutzt habe, sondern mir die WifiInfos neu aus dem WifiManager geholt habe. Frag mich nicht, warum, aber das hat bei mir tatsächlich geholfen:

Java:
int wifi_level = WifiManager.calculateSignalLevel(wifiMgr.getConnectionInfo().getRssi(), numberOfLevels);


Außerdem habe ich in meiner App die Permission android.permission.ACCESS_WIFI_STATE. Hast du die auch drin?
 
Wie bekomme ich den richtigen WLAN-Namen, mit dem ich verbunden bin?


public WifiInfo getConnectionInfo ()
This method was deprecated in API level 31.
Starting with Build.VERSION_CODES#S, WifiInfo retrieval is moved to ConnectivityManager API surface. WifiInfo is attached in NetworkCapabilities#getTransportInfo() which is available via callback in NetworkCallback#onCapabilitiesChanged(Network, NetworkCapabilities) or on-demand from ConnectivityManager#getNetworkCapabilities(Network).
 
Hi,

ich habe vor kurzem zufällig auch eine App gemacht, die mir die Signalstärke vom WLAN anzeigen soll. Im Prinzip mach ich das da auf dieselbe Weise wie du, nur dass mein numLevels = 7 ist.

Wenn ich mich richtig erinnere, hatte ich beim ersten Versuch auch das Problem, dass die ausgegebene Stärke nicht passte. Ich habe dann die Zeile mit dem calculate so geändert, dass ich nicht ein vorher gesetztes "wifiInfo" Objekt genutzt habe, sondern mir die WifiInfos neu aus dem WifiManager geholt habe. Frag mich nicht, warum, aber das hat bei mir tatsächlich geholfen:

Java:
int wifi_level = WifiManager.calculateSignalLevel(wifiMgr.getConnectionInfo().getRssi(), numberOfLevels);


Außerdem habe ich in meiner App die Permission android.permission.ACCESS_WIFI_STATE. Hast du die auch drin?
Ja ich habe die Permission drinnen. Möchte den richtigen db wert haben z.B. -157db. Leider ist so eine Zahl nicht gut genug, deswegen auf Dezibel. Wie hast du das mit den Namen gemacht?
 
public static int calculateSignalLevel (int rssi, int numLevels)
ist auch seit API 30 Deprecated
Was kann ich da jetzt machen? da müssen doch alle Wlan Apps nicht mehr gehen. Wieso haben die das eingestellt?


public WifiInfo getConnectionInfo ()
This method was deprecated in API level 31.
Starting with Build.VERSION_CODES#S, WifiInfo retrieval is moved to ConnectivityManager API surface. WifiInfo is attached in NetworkCapabilities#getTransportInfo() which is available via callback in NetworkCallback#onCapabilitiesChanged(Network, NetworkCapabilities) or on-demand from ConnectivityManager#getNetworkCapabilities(Network).
Warum darf man den Netzwerknamen nicht auslesen, mit wenn man verbunden ist?

Habe die App auf TragetSDK 29 gestellt. Ergebnis: geht nicht.
 
Was kann ich da jetzt machen? da müssen doch alle Wlan Apps nicht mehr gehen. Wieso haben die das eingestellt?
Da musst du Google Fragen 🙂

Warum darf man den Netzwerknamen nicht auslesen, mit wenn man verbunden ist?
klar kannst du das, in der Doku wird doch auf den ConnectivityManager hingewiesen.

schaue mal hier .

PS: Lese doch die Hinweise die im roten Kasten sind.
 
public static int calculateSignalLevel (int rssi, int numLevels)
ist auch seit API 30 Deprecated


Was kann ich da jetzt machen? da müssen doch alle Wlan Apps nicht mehr gehen. Wieso haben die das eingestellt?
es gibt ja eine neue Methode die auch im Roten Kasten genannt wird.
Heist auch gleich nur Parameter anders und nicht static , ist erst ab API 30 vorhanden.
 
Da musst du Google Fragen 🙂


klar kannst du das, in der Doku wird doch auf den ConnectivityManager hingewiesen.

schaue mal hier .
Ich verstehe fast nixs. Jeder Transport hat eine Funktion, die auch Beschrieben wird. Meine wird sein, denke ich mal: TRANSPORT_WIFI. Aber weiß nicht, wie ich das umbaue... bzw. wie ich das zusammenstellen kann.
PS: Lese doch die Hinweise die im roten Kasten sind.
Werde weiter schauen. Habe durch Recherchen herausgefunden, die App braucht eine erfolgreiche Standortberechtigung, um den Namen auslesen zu können. Aber das sollte auch ohne GPS gehen...
 
Java:
In API 31 or above (at time of writing), you need to have these two permissions:

    android.permission.ACCESS_FINE_LOCATION protection: dangerous
    android.permission.ACCESS_WIFI_STATE protection: normal

Then you can get the SSID synchronously like so:

ConnectivityManager cm =
      context.getSystemService(ConnectivityManager.class);
Network n = cm.getActiveNetwork();
NetworkCapabilities netCaps = cm.getNetworkCapabilities(n);
WifiInfo info = (WifiInfo) netCaps.getTransportInfo();
String ssid = wifiInfo.getSSID();

This is the only way to get the results synchronously. Note, even if you use the async callbacks as suggested by other answers and the official docs, you'll still need the listed permissions to access the SSID.
 
in dem link von so steht doch alles
Screenshot 2023-09-01 at 17-26-10 Getting Wifi SSID from ConnectivityManager NetworkCapabiliti...png

Meinst du diesen Teil? Musste laut AS das so umbauen:

Java:
        String ssid = "dummy";
        ConnectivityManager cm =
                null;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
            cm = getContext().getApplicationContext().getSystemService(ConnectivityManager.class);
        }
        Network n = null;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
            n = cm.getActiveNetwork();
        }
        NetworkCapabilities netCaps = cm.getNetworkCapabilities(n);
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
            WifiInfo wifiInfo = (WifiInfo) netCaps.getTransportInfo();
            ssid = wifiInfo.getSSID();
        }


        Log.e("Signal: " , ssid);

Bekomme dann: <unknown ssid>
 
cm = getContext().getApplicationContext().getSystemService(ConnectivityManager.class);
Hierzu währe zu wissen wo du bist. Du brauchst den Context der Activity
 
hast du die Permission zur Laufzeit vom Usrer geholt?
so wie du auch die anderen für deine app brauchst.
Also Manuell, auf <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> Da bekomme ich keine Info Nur unbekannte SSID.

Damit geht es:

Java:
        String ssid = "dummy";
        WifiManager wifiMgr = (WifiManager)getActivity().getApplicationContext().getSystemService(Context.WIFI_SERVICE);
        WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
        ssid = wifiInfo.getSSID();

        Log.e("Signal: " , ssid);

Es geht nur, wenn man diese Berechtigung zulässt. Möchte es ohne den Standort zugriff. Diese neue Methode geht, glaube ich ohne Standort.

Möchte nicht den Nutzer für Geld senden, extra eine App die Standortnutzung freigibt. Sonst müsste ich eine Abfrage jedes mal machen und die Erlaubniss holen..
 
denke doch mal nach, wie du eine dangerous Permission holst .
Tipp checkSelfPermission()

das hast du in deiner app schon gemacht also ergänze es um diese.
 
denke doch mal nach, wie du eine dangerous Permission holst .
Tipp checkSelfPermission()

das hast du in deiner app schon gemacht also ergenes es um diese.
Also führt kein Weg herum dem App Store Nutzer, beim Geld senden die Standaort Berechtigung einzuholen. Dachte es geht auch anders. Dachte die neue Methode..

Das mit der Signalstärke geht immer noch nicht in dbm Format.
 
die Klasse gib es seit API 21 neu 😉
und getTransportInfo seit API 29

Also führt kein Weg herum dem App Store Nutzer, beim Geld senden die Standaort Berechtigung einzuholen. Dachte es geht auch anders. Dachte die neue Methode..

Das mit der Signalstärke geht immer noch nicht in dbm Format.

sorry Code war falsch
Java:
 int wifi_level = wifiMgr.calculateSignalLevel(wifiMgr.getMaxSignalLevel());

wenn du es in dbm haben willst brauchst du das "wifiInfo" denn da ist nicht nur die SSID sondern auch rssi enthalten.
und um das zubekommen wie gesagt Permission




​

 
Zuletzt bearbeitet:
die Klasse gib es seit API 21 neu 😉
und getTransportInfo seit API 29



Java:
int wifi_level = WifiManager.calculateSignalLevel(wifiMgr.getConnectionInfo().getRssi(), numberOfLevels);

wenn du es in dbm haben willst brauchst du das "wifiInfo" denn da ist nicht nur die SSID sondern auch rssi enthalten.
und um das zubekommen wie gesagt Permission




​

Diese Habe ich schon:


<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

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

<uses-permission android:name="com.android.vendig.Billing" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.DELETE_PACKAGES" />
<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<permission
android:name="android.permission.REQUEST_SUPERUSER"
android😛rotectionLevel="signature" />
<permission
android:name="android.permission.REPORT_SUPERUSER"
android😛rotectionLevel="signature" />

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


Welche brauche ich dafür`und ist das eine Pflicht Dialog?
 
Ehrlich gesagt verstehe ich den sinn nicht wozu du beim kauf einer App die SSID brauchst.
Also den Namen des WLAN wo der User die APP Datei geladen hat.
 
Ehrlich gesagt verstehe ich den sinn nicht wozu du beim kauf einer App die SSID brauchst.
Also den Namen des WLAN wo der User die APP Datei geladen hat.
Man Kann Guthaben versenden an eine andere Kundennummer. Da gibt es zwei möglichkeiten: 1. Anonymer Modus, da wird nur Empfänger, Datum und Beitrag protokolliert.
Und dann den gesicherten Modus. Der Speichert sehr viel. Sinn ist, da das ja eigentlich dein Account ist, darfst du deine eigenen Daten ansehen. Und sollte Betrug sein, kann man zur Polizei gehen.

Empfohlen ist, beim Überweisen auf Anonym stellen und hinterher wieder auf gesicherten Mous.

Mein Nachbar meinte, manche Daten wie GPS darf ich nicht protokollieren oder das WLAN Umgebung abscannen, auch wenn der Nutzer zustimmt. Ich darf bei WIFI den verbundenden Namen abspeichern.

Aufgrund des Geldwäschegesetz darf man die Überweisung nur machen bei Freischaltung. Empfangen darf jeder. Da die Gutscheinkarten für ein App Store im Supermarkt, vom Supermarkt gebürgt wird. Sobald Geld fließt, muss man den Kunden kennen.

Jetzt wird nur bei Überweisung(Sonst Nie!) die IP-Adresse Protokolliert, ob man Mobil oder per Wlan das Geld gesendet hat. Das dient zur Strafverfolgung...


Ps.: Habe noch Probleme mit dem Berechtigungen... Welche Berechtigung außer ACCESS_FINE_LOCATION brauche ich noch?
 
die Klasse gib es seit API 21 neu 😉
und getTransportInfo seit API 29



sorry Code war falsch
Java:
 int wifi_level = wifiMgr.calculateSignalLevel(wifiMgr.getMaxSignalLevel());

wenn du es in dbm haben willst brauchst du das "wifiInfo" denn da ist nicht nur die SSID sondern auch rssi enthalten.
und um das zubekommen wie gesagt Permission




​

Bekomme keine dBm raus, nur die großen Zahlen. Würde es gerne wie -157dBm haben wollen. Auch mit dem Vorschlag vom AS hat es nicht geklappt. Ergebnis: 4.
 
Laut Nachbarn, darf ich nicht die Umgebung Scannen, auch wenn der Nutzer es erlaubt, ist eine illegale Handlung. Deswegen darf ich nur mein eigenes Netzwerk nehmen, mit welches ich aktuell verbunden bin.

Habe Probleme mit dem Request. Werde evtl. mal schauen, wie die App zum Installieren die bekommen hat....
 
komme nicht in die Request rein:

Java:
    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        if (requestCode == ACCESS_FINE_LOCATION_PERMISSION_CODE) {
          
                Log.e("Ankunft", "ja und Code: " + requestCode);
                Log.e("Ankunft", "nein Code:" + grantResults);

            
        }
    }

wird nixs abgewickelt. Alles andere geht mit den Berechtigungen auswählen..
 
Ich habe dir doch zwei Links geben wo gezeigt wird wie du eine Laufzeit Permission vom User erfragen kannst.
Hat aber nur der erste Teil funktioniert. Der zweite Teil, wo es in die RequstPermisson gehen soll, geht nicht rein. Wollte da eine if Abfrage machen, um das Ergebnis zu deuten. Aber die Anfrage geht erst gar nicht rein...

Der erster Link isst für Kotlin, wie es aussieht.
 
Ungläubiges Nachfragen nach mehr Details. Die Aussage als solche halte ich für falsch, das hängt aber davon ab, was zum Beispiel Du unter "Umgebung scannen" verstehst.
Wenn du Geld senden wolltest, gab es 2 Moduse. Beim gesicherten Modus werden die Wlane die in der Umgebung sich befinden + dessen Stärke und so im Protokoll mit abgespeichert. Wollte bis zu 10 Wlan Namen und dessen Stärken in der Datenbank speichern , damit dere Nutzer im Protokoll bei der Überweisung die Aufzählung hat, damit die Polizei den genauen Ort bestimmen können, also welche Wohnung. Und mit GPS das Haus.
Laut Nachbarn darf man die Wlane nicht scannen und die dann in die Datenbank abspeichern.

Man darf nur sein eigenes Wlan abspeichern, mit welche man grade verbunden ist. Das kommt zu dem Kenne dein Kunden dazu... Es gibt das Geldwäschegesetz.

Noch fragen?
 
Wenn du Geld senden wolltest, gab es 2 Moduse. Beim gesicherten Modus werden die Wlane die in der Umgebung sich befinden + dessen Stärke und so im Protokoll mit abgespeichert. Wollte bis zu 10 Wlan Namen und dessen Stärken in der Datenbank speichern , damit dere Nutzer im Protokoll bei der Überweisung die Aufzählung hat, damit die Polizei den genauen Ort bestimmen können, also welche Wohnung. Und mit GPS das Haus.
Laut Nachbarn darf man die Wlane nicht scannen und die dann in die Datenbank abspeichern.

Man darf nur sein eigenes Wlan abspeichern, mit welche man grade verbunden ist. Das kommt zu dem Kenne dein Kunden dazu... Es gibt das Geldwäschegesetz.

Noch fragen?
Wenn das so ist was nützt dir dann deine eigene SSID . Da ist deine öffentliche IP aussage grätiger.
Ich könnte nach der Transaktion mein Wlan umbenennen. Ob du Mobil oder mit einen Wlan verbunden bist bekommst du ja.
Und man kann auch über die IP heraus finden ob es Mobil oder Fest-Anschluss war.
 
Wenn das so ist was nützt dir dann deine eigene SSID . Da ist deine öffentliche IP aussage grätiger.
Ich könnte nach der Transaktion mein Wlan umbenennen. Ob du Mobil oder mit einen Wlan verbunden bist bekommst du ja.
Und man kann auch über die IP heraus finden ob es Mobil oder Fest-Anschluss war.
Sowie du im #1 gesehen hast, klammere ich VPN aus, damit ich die richtige IP bekomme bei der Überweisung.
Wlan dient nur zu deinem Schutz. Wenn jemand Geld von deinem Konto überweist und es ist mit deinem WLAN verbunden, kann das nur jemand sein, der deine Zugangsdaten hat, bzw. sind das deine eigenen Kinder.

Deswegen soll auch der Internetprovider herausgefunden werden, nicht nur der SIM-Karten Betreiber, da man ja mit Hotspot verbunden ist...

Der Code vom 2. Link geht nicht richtig...
 
Also ich sehe hier mehrere praktische Probleme..

Zunächst einmal die deine rechtliche Einschätzung,

du seist für die Umsetzung des GwG verantwortlich. Das bist du nur, wenn du gemäß §2 GwG als solcher genannt bist: https://www.gesetze-im-internet.de/gwg_2017/__2.html

Weiter ist fraglich, ob die Maßnahme "Position der Person" für das GwG die richtige ist. Vielmehr wird es darauf ankommen die Identität der Person eindeutig zu bestimmen.

Sagen wir ich möchte Geld von A nach B schicken. Würde ich niemals auf die Idee kommen eine APP dafür zu nutzen, die von mir erlaubt bekommen möchte sich überall hin zu verbinden. Wenn man hier die Bezahl API von Google nutzt, wird es sich auch nur um Ingame Käufe oder ähnliches handeln.

Hier als Nutzer einer solchen Funktion kann ich mich wohl darauf verlassen, dass die genutzten "Karten" entsprechend von diesem verifiziert sind. Und die Transaktionen dann via Developer Programm irgendwann auf meinem Konto landen.

Deine Anforderung SSIDs der Umgebung und deren Stärke zu speichern: Puhh kann man machen würde ich sagen. Die SSIDs werden ständig überall hingestrahlt. Diese werden auch z.B. von meiner Fritzbox ständig überwacht, um Frequenzbänder korrekt einzustellen.

Wenn ich den Standort feststellen will, wann und wo die Transaktion getätigt worden ist, würde ich die GPS API nutzen. Gesetzt den Falls, dass ich keine Verbindung zu Sateliten habe, wird diese, wenn der User es erlaubt, "WLANs zur besseren Ortung" verwenden. Zumindest ist es auf dem iPhone so... Keine Ahnung, wie das im Detail funktioniert.

Sowie du im #1 gesehen hast, klammere ich VPN aus, damit ich die richtige IP bekomme bei der Überweisung.
Wlan dient nur zu deinem Schutz. Wenn jemand Geld von deinem Konto überweist und es ist mit deinem WLAN verbunden, kann das nur jemand sein, der deine Zugangsdaten hat, bzw. sind das deine eigenen Kinder.

Da würde es mich interessieren, woher du das hast. Das hört sich für mich banal gesprochen, extrem falsch an. Ich kann ja ein WLAN aufmachen, dass die gleiche SSID hat, wie jemand anders... Das bringt keinen praktischen Schutzt.

Wenn ich von Konto A auf Konto B überweisen will, muss (siehe GwG) das Kreditinstitut die Identität der Person bei Kontoeröffnung eindeutig feststellen.

Also ingesammt alles sehr abenteuerlich hier 😉

Wenn das eine Spaß APP ist, dann sollte man das von vorneherein klären. "Ich möchte die WLAN API testen, wie man diese nutzt", daher möchte ich...

Ist es eine zukünftig Produktive App, dann schlage ich dringend vor ein entsprechendes Anforderungs Papier (Pflichen und Lastenhelft) zu erstellen. Darauf aufbauend ein Architekturkonzept zu erstellen, worauf die Implementierung dann aufsetzen kann. Hier einfach Wahllos irgendwas zu implementieren ist Zeitverschwendung und mindeert potentielle Gewinne erheblich.
 
Also ich sehe hier mehrere praktische Probleme..

Zunächst einmal die deine rechtliche Einschätzung,

du seist für die Umsetzung des GwG verantwortlich. Das bist du nur, wenn du gemäß §2 GwG als solcher genannt bist: https://www.gesetze-im-internet.de/gwg_2017/__2.html
Das Geld senden ist erstmal mein jetziger Schritt, bis es alles klappt. Das ist ein größeres Thema, was ein Rechtsanwalt klären muss. Da ich ja Geld von A nach B innerhalb der App transferiere, soll ich das tun. Werde mih noch mal mit einem Rechtsanwalt hinsetzten müssen. Kann trotzdem alle Maßnahmen ergreifen... Und die Parameter dann in der DB ändern.
Weiter ist fraglich, ob die Maßnahme "Position der Person" für das GwG die richtige ist. Vielmehr wird es darauf ankommen die Identität der Person eindeutig zu bestimmen.

Sagen wir ich möchte Geld von A nach B schicken. Würde ich niemals auf die Idee kommen eine APP dafür zu nutzen, die von mir erlaubt bekommen möchte sich überall hin zu verbinden. Wenn man hier die Bezahl API von Google nutzt, wird es sich auch nur um Ingame Käufe oder ähnliches handeln.
Es ist ein eigener App-Store, wo man sein Guthaben(wenn man freigeschaltet ist, außer wenn der Rechtsanwalt was anderes sagt) an einer anderen Kundennummer überweisen kann, damit Person B eine App oder In-App-Käufe damit tätigen kann.
Hier als Nutzer einer solchen Funktion kann ich mich wohl darauf verlassen, dass die genutzten "Karten" entsprechend von diesem verifiziert sind.
Was meinst du mit Karten? Die Guthabenkarten aus dem Supermarkt? Die Bürgen für dich, deswegen ist aufladen kein Problem.
Und die Transaktionen dann via Developer Programm irgendwann auf meinem Konto landen.
Das Geld System macht das Automatisch, sobald jemand eine App von dir kauft bzw. In App Käufe, dann landet es in der Entwickler Konsole auf dein Konto. Die Auszahlung muss mit einem Rechtsanwalt geklärt werden, ob komplett am Anfang, kenne dein Kunde bzw. Kenne das Unternehmen oder ab einen bestimmten Betrag erst...
Deine Anforderung SSIDs der Umgebung und deren Stärke zu speichern: Puhh kann man machen würde ich sagen. Die SSIDs werden ständig überall hingestrahlt. Diese werden auch z.B. von meiner Fritzbox ständig überwacht, um Frequenzbänder korrekt einzustellen.
Wird nicht in eine Datenbank einfach abgespeichert, wo man es besser sehen kann.
Wenn ich den Standort feststellen will, wann und wo die Transaktion getätigt worden ist, würde ich die GPS API nutzen. Gesetzt den Falls, dass ich keine Verbindung zu Sateliten habe, wird diese, wenn der User es erlaubt, "WLANs zur besseren Ortung" verwenden. Zumindest ist es auf dem iPhone so... Keine Ahnung, wie das im Detail funktioniert.
Ich darf keine GPS Daten in eine Datenbank speichern, auch wenn der Nutzer es erlaubt. Nur mit dem grade verbundenen WLAN.
Da würde es mich interessieren, woher du das hast. Das hört sich für mich banal gesprochen, extrem falsch an. Ich kann ja ein WLAN aufmachen, dass die gleiche SSID hat, wie jemand anders... Das bringt keinen praktischen Schutzt.
Was meinst du mit diesem Satz und worüber redest du?
Wenn ich von Konto A auf Konto B überweisen will, muss (siehe GwG) das Kreditinstitut die Identität der Person bei Kontoeröffnung eindeutig feststellen.
Das Gleiche sollte ich vom Nachbarn auch machen, sobald Geld versendet werden kann. Sobald System funktioniert, kläre ich das vor der Beta Eröffnung mit einem Rechtsanwalt ab.
Also ingesammt alles sehr abenteuerlich hier 😉

Wenn das eine Spaß APP ist, dann sollte man das von vorneherein klären. "Ich möchte die WLAN API testen, wie man diese nutzt", daher möchte ich...

Ist es eine zukünftig Produktive App, dann schlage ich dringend vor ein entsprechendes Anforderungs Papier (Pflichen und Lastenhelft) zu erstellen. Darauf aufbauend ein Architekturkonzept zu erstellen, worauf die Implementierung dann aufsetzen kann. Hier einfach Wahllos irgendwas zu implementieren ist Zeitverschwendung und mindeert potentielle Gewinne erheblich.
Eine App ist nie am Anfang perfekt, die wird häufig geändert bzw. angepasst, wenn das eine große ist, wie meine. Die Beta soll erstmal nur funktionieren. Dann werden Entwickler, die Nach und Nach verbessern(Design, Sicherheitslücken, Bucks,...)


PS.: Habe überlegt, da man das WLAN auch ändern kann, kann man eine Art einmal Passwort nehmen, dass es zur senden braucht. Da kann man auf der sicheren Webseite mit dem Mega Code die Einstellungen vornehmen, wie z.B. Senden komplett zu sperren, da Täter ja auch an den Mega oder Supercode kommen müssen. Wenn diese es ausgedruckt hat und die E-Mail gelöscht hat, kann er es nicht mehr senden bzw. ausgeben...

Nicht Genial? 😉
 
Ich darf keine GPS Daten in eine Datenbank speichern, auch wenn der Nutzer es erlaubt.
Wer verbietet Dir das denn?

Haben Deine Nachbarn das gesagt? Meine Nachbarn haben gesagt, dass Du mir ganz viel Geld schenken sollst (Habe gesagt, dass ich es mit denen teilen würde - da haben die das sofort gesagt 🙂 )

Vermutlich geht es um Datenschutz und speichern von personifizierten Daten. Und Datenschutz hat da klare Vorgaben, was wann erlaubt ist. Du hast gewisse Dokumentationspflichten und so weiter. Es scheint, dass es gewisse gesetzliche Vorgaben geben könnte, wenn Du die Position brauchst. Das wäre dann sogar ohne Einwilligung erlaubt. (Ich kann dem Finanzamt auch nicht absprechen, meine Daten zu speichern und zu verarbeiten ... Oder sie auffordern, alle Daten von mir zu löschen.... Oder wenn ich zu schnell gefahren bin: Ich widerspreche einfach der Verarbeitung personenbezogener Daten und schon können die mit meinem Nummernschild und so nichts mehr anfangen und müssen das Blitzerfoto unkenntlich machen 🙂 ) Aber selbst wenn das gesetzlich nicht vorgegeben wäre, dann kann es mit Nutzereinwilligung passieren.

Also auf den ersten Blick klingt da vieles relativ dubios. Auch bin ich mir nicht sicher, ob WLAN Daten als personenbezogen gelten. Das könnte durchaus umstritten sein ähnlich wie bei MAC Adressen. (Oder gibt es dazu schon erste Entscheidungen auf Landgerichtsebene oder besser OLG?)

Aber das sin juristische Fragen - da sollen dann Juristen ran und das klären. Und ob ich etwas einleuchtend finde oder nicht spielt so wenig eine Rolle wie die Frage, ob in China ein Sack Reis umgefallen ist ...
 
Mal etwas zurück zum Code.
Du willst Pegel in dbm dann braucht du doch nur das „rssi“ aus dem „wifiInfo“ und nicht die Methode „calculateSignalLevel“.
Hier mal ein kleines Beispiel was dir auch zeigt wie du die Permission holen kannst.

Java:
public class MainActivity extends AppCompatActivity {

    private final static int REQUEST_CODE_ASK_PERMISSIONS = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        checkPermissions();
    }
    private void initialize() {

        ConnectivityManager cm = getSystemService(ConnectivityManager.class);
        Network n = cm.getActiveNetwork();
        NetworkCapabilities netCaps = cm.getNetworkCapabilities(n);
        WifiInfo wifiInfo = null;

        if (Build.VERSION.SDK_INT >= 30) {
            wifiInfo = (WifiInfo) netCaps.getTransportInfo();
        } else {
            WifiManager wifiMgr = (WifiManager) getSystemService(Context.WIFI_SERVICE);
            wifiInfo = wifiMgr.getConnectionInfo();

        }


        String ssid = wifiInfo.getSSID();
        TextView textSsid = findViewById(R.id.ssid);
        textSsid.setText(ssid);

        int rssi = wifiInfo.getRssi();
        TextView textRssi = findViewById(R.id.rssi);
        textRssi.setText("" + rssi);

    }

    protected void checkPermissions() {

        String[] REQUIRED_SDK_PERMISSIONS ;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.TIRAMISU) {
            REQUIRED_SDK_PERMISSIONS = new String[]{
                    Manifest.permission.ACCESS_FINE_LOCATION,
                    Manifest.permission.NEARBY_WIFI_DEVICES,
                    Manifest.permission.READ_EXTERNAL_STORAGE};
        } else {
            REQUIRED_SDK_PERMISSIONS = new String[]{
                    Manifest.permission.ACCESS_FINE_LOCATION,
                    Manifest.permission.READ_EXTERNAL_STORAGE};

        }


        final List<String> missingPermissions = new ArrayList<String>();
        // check all required dynamic permissions
        for (final String permission : REQUIRED_SDK_PERMISSIONS) {
            final int result = ContextCompat.checkSelfPermission(this, permission);
            if (result != PackageManager.PERMISSION_GRANTED) {
                missingPermissions.add(permission);
            }
        }
        if (!missingPermissions.isEmpty()) {
            // request all missing permissions
            final String[] permissions = missingPermissions
                    .toArray(new String[missingPermissions.size()]);
            ActivityCompat.requestPermissions(this, permissions, REQUEST_CODE_ASK_PERMISSIONS);
        } else {
            final int[] grantResults = new int[REQUIRED_SDK_PERMISSIONS.length];
            Arrays.fill(grantResults, PackageManager.PERMISSION_GRANTED);
            onRequestPermissionsResult(REQUEST_CODE_ASK_PERMISSIONS, REQUIRED_SDK_PERMISSIONS,
                    grantResults);
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[],
                                           @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case REQUEST_CODE_ASK_PERMISSIONS:
                for (int index = permissions.length - 1; index >= 0; --index) {
                    if (grantResults[index] != PackageManager.PERMISSION_GRANTED) {
                        finish();
                        return;
                    }
                }
                // all permissions were granted
                initialize();
                break;
        }
    }


}

Code:
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />


    <uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES"
        tools:ignore="CoarseFineLocation" />

    <uses-permission
        android:name="android.permission.ACCESS_FINE_LOCATION"
        android:maxSdkVersion="32"
        tools:ignore="CoarseFineLocation" />


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

Neue Themen


Zurück
Oben