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 ;)
 

Robertop

Bekanntes Mitglied
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?
 

Jw456

Top Contributor
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).
 

wer112

Top Contributor

wer112

Top Contributor
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?
 

wer112

Top Contributor
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.
 

Jw456

Top Contributor
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.
 

Jw456

Top Contributor
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.
 

wer112

Top Contributor
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...
 

Jw456

Top Contributor
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.
 

wer112

Top Contributor
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>
 

Jw456

Top Contributor
cm = getContext().getApplicationContext().getSystemService(ConnectivityManager.class);
Hierzu währe zu wissen wo du bist. Du brauchst den Context der Activity
 

wer112

Top Contributor
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..
 

Jw456

Top Contributor
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.
 

wer112

Top Contributor
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.
 

Jw456

Top Contributor
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:

wer112

Top Contributor
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:protectionLevel="signature" />
<permission
android:name="android.permission.REPORT_SUPERUSER"
android:protectionLevel="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?
 

Jw456

Top Contributor
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.
 

wer112

Top Contributor
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?
 

wer112

Top Contributor
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.
 

wer112

Top Contributor

wer112

Top Contributor
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..
 

wer112

Top Contributor
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.
 

wer112

Top Contributor
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?
 

Jw456

Top Contributor
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.
 

wer112

Top Contributor
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...
 

Marinek

Bekanntes Mitglied
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.
 

wer112

Top Contributor
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? ;)
 

KonradN

Super-Moderator
Mitarbeiter
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 ...
 

Jw456

Top Contributor
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" />
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Android Datei Übertragung im Netzwerk Android & Cross-Platform Mobile Apps 8
P Android Programm stürzt ab - Es geht um Netzwerk Android & Cross-Platform Mobile Apps 5
T Android Netzwerk - Objekte senden Android & Cross-Platform Mobile Apps 9
N Android AIDE - Ausgehende Verbindungen abfangen Android & Cross-Platform Mobile Apps 2
AllBlack Suche Programmierer in Java und Kotlin mit dem ich mich Selbstständig machen kann Android & Cross-Platform Mobile Apps 23
Adem61 Flutter Frontend und Java Backend möglich ? Android & Cross-Platform Mobile Apps 2
M Repository bei Room-Database in Android Studio (Java) Android & Cross-Platform Mobile Apps 2
T Android Android Augmented Faces in Java. Neue Landmarks erstellen Android & Cross-Platform Mobile Apps 1
rafi072001 Java API um HTML Elemente von externen Websiten zu bekommen Android & Cross-Platform Mobile Apps 2
N Android java.lang.IllegalStateException: No host Android & Cross-Platform Mobile Apps 22
A Mit Java neues item in ein string-array einer Strings.xml schreiben Android & Cross-Platform Mobile Apps 4
ruutaiokwu Wie fügt man bei Android Studio .jar-Libraries zu einem Android-Java-Projekt hinzu? Android & Cross-Platform Mobile Apps 33
M Gradle sync failed: Could not determine Java version using executable Android & Cross-Platform Mobile Apps 5
J AndroidStudio Login.Java Android & Cross-Platform Mobile Apps 0
O Web API in Android (JAVA) einbinden Android & Cross-Platform Mobile Apps 3
N Wie kann ich mein Handy mit Java rooten? Android & Cross-Platform Mobile Apps 38
T Bringen mir die Java-Basics irgendetwas für die Android-Programmierung Android & Cross-Platform Mobile Apps 4
T Fehler Android Studio: java.net.MalformedURLException: no protocol: http%3A%2F%2Fwww.mal ..... Android & Cross-Platform Mobile Apps 2
C Android Programmierung speziell oder einfach Java Buch kaufen? Android & Cross-Platform Mobile Apps 3
L Android RadioButtonGroup innerhalb der JAVA Android & Cross-Platform Mobile Apps 4
L Android Java scheint XML nicht zu finden Android & Cross-Platform Mobile Apps 11
J Android String in andere Java-Dateien überführen Android & Cross-Platform Mobile Apps 1
J Android Java Packet in Android Java ide hinzufügen. Android & Cross-Platform Mobile Apps 3
T Usage: java ZipInfo zfname Android & Cross-Platform Mobile Apps 2
P Android App - Java Android & Cross-Platform Mobile Apps 1
S Android Android java onclick listener Problem Android & Cross-Platform Mobile Apps 9
P Android JUnit Testprojekt warum keine Java Klassen Android & Cross-Platform Mobile Apps 1
J Plötzlich "java.lang.String cannot be converted to JSONObject" Android & Cross-Platform Mobile Apps 9
A Android join."," von python in java Android & Cross-Platform Mobile Apps 4
C Android Code in mehrere .java verteilen Android & Cross-Platform Mobile Apps 6
T Android Android Sensor: Java Problem Android & Cross-Platform Mobile Apps 1
A Wieso keine java - forum app Android & Cross-Platform Mobile Apps 4
D Lib für (Desktop-)Java und Android schreiben Android & Cross-Platform Mobile Apps 7
D Android Java-Umfang durch Apps-Entwicklung? Android & Cross-Platform Mobile Apps 1
M jsonobject cannot be cast to java.lang.string Android & Cross-Platform Mobile Apps 4
M Fehler ohne Sinn? java.lang.RuntimeException: Unable to start activity ComponentInfo Android & Cross-Platform Mobile Apps 11
W Java Editor für Android +Emulator Android & Cross-Platform Mobile Apps 7
B java.lang.RuntimeException: Unable to start activity ComponentInfo Android & Cross-Platform Mobile Apps 2
M Android Switch-Klasse stoppt Android App / java.lang.NullPointerException Android & Cross-Platform Mobile Apps 5
L Mit Java ein Android Projekt kompilieren Android & Cross-Platform Mobile Apps 6
F Bei einer Android Java App, Objekte erstellen Android & Cross-Platform Mobile Apps 2
J Android-App-Programmierung - Ähnlich normaler Java-Programmierung? Android & Cross-Platform Mobile Apps 6
G R.java erzeugen Android & Cross-Platform Mobile Apps 5
M Java und App Programmierung in 4 Monaten? Android & Cross-Platform Mobile Apps 7
X Unable to execute dex: Java heap space Exception bei Sqllite lib Android & Cross-Platform Mobile Apps 14
G Wie kann ich nachhelfen die R.java zu aktualisieren? Android & Cross-Platform Mobile Apps 3
G Android XML - Teil in Java importieren Android & Cross-Platform Mobile Apps 2
M Push-Nachricht via Java Android & Cross-Platform Mobile Apps 2
F Bilder in Java importieren (Fehler?) Android & Cross-Platform Mobile Apps 5
L Java Anwendungen fürs IPad Android & Cross-Platform Mobile Apps 6
S Desktop Anwedung ( Java 6 ) auf android zu greifen. Android & Cross-Platform Mobile Apps 6
V App Daten in Java Applikation Android & Cross-Platform Mobile Apps 3
L Android Android über Java Code connecten? Android & Cross-Platform Mobile Apps 2
A Android SimpleDateFormat gibt für Date unter android anderes Datum zurück als in Std. Java Android & Cross-Platform Mobile Apps 2
S Android binäre Daten zwischen Android und einem Java-Server Android & Cross-Platform Mobile Apps 5
A Java Symbian Programmierung Android & Cross-Platform Mobile Apps 4
S Android Java, Android und Serializable Android & Cross-Platform Mobile Apps 3
M Frage zu Java Programm für Windows Mobile 6.5 Android & Cross-Platform Mobile Apps 2
H Mjpeg Code läuft unter Java jedoch nicht unter Android? Android & Cross-Platform Mobile Apps 11
W Android Crosswordliste Java<->Android Syntax Android & Cross-Platform Mobile Apps 5
H Android ANDROID SDK + JAVA SE Development Kit (JDK) Android & Cross-Platform Mobile Apps 4
B Java auf dem Handy Android & Cross-Platform Mobile Apps 5
Y sun java wireless toolkit couldnt find jdk Android & Cross-Platform Mobile Apps 2
S ipod app mit java Android & Cross-Platform Mobile Apps 22
J Java ME java.rmi.Remote kann nicht gefunden/geladen werden Android & Cross-Platform Mobile Apps 9
Bastifantasti Java ME Objekte in Java? Android & Cross-Platform Mobile Apps 3
P Java ME Java me sdk3 - bin am ende Android & Cross-Platform Mobile Apps 7
K Java ME Handy Java App die die Navigationstasten abfragt Android & Cross-Platform Mobile Apps 7
W Android gleich Java? Android & Cross-Platform Mobile Apps 3
C Java ME Kein Java Zugriff auf Samsung! Android & Cross-Platform Mobile Apps 5
R Handy Java Version Android & Cross-Platform Mobile Apps 18
J iPhone/iPod/iPad und Java? Android & Cross-Platform Mobile Apps 12
E Java ME package java.sql does not exist? Android & Cross-Platform Mobile Apps 2
V [Java] und [JavaME] ClientServer StreamConnection . Problem beim lesen / schreiben Android & Cross-Platform Mobile Apps 2
O Entwickler für Java Anwendungen auf Handy gesucht! Android & Cross-Platform Mobile Apps 3
I Java Handy - mehrere Programme gleichzeitig Android & Cross-Platform Mobile Apps 8
Screen Java auf Handy,aber nicht Ja2Me ! Android & Cross-Platform Mobile Apps 3
T Java Mobile SDK 3 - Can't Connect to Device Manager Android & Cross-Platform Mobile Apps 14
R Java Programmierung auf Handys Android & Cross-Platform Mobile Apps 8
B Java PC Spiel fürs Handy umwandeln? Android & Cross-Platform Mobile Apps 8
F Server - Client Verbindung mit Java ME Android & Cross-Platform Mobile Apps 3
Outsourcer Kann Java das? Android & Cross-Platform Mobile Apps 13
R Java ME mit Zugriff auf Adressbuch / Kalender Android & Cross-Platform Mobile Apps 3
G Hab mal allgeneine Frageb zu Java ME ! Android & Cross-Platform Mobile Apps 2
H WTK 2.5.2 nur mit Java 1.5? Android & Cross-Platform Mobile Apps 4
T Java Bluetooth Kalender Android & Cross-Platform Mobile Apps 2
W Java auf ein CECT Handy installieren Android & Cross-Platform Mobile Apps 6
A Java Programm auf Handy? Android & Cross-Platform Mobile Apps 2
D java.lang.UnsatisfiedLinkError Android & Cross-Platform Mobile Apps 3
C Telefonanruf mit Java absetzen? Android & Cross-Platform Mobile Apps 5
L Ungültiges Java-Archiv (jar) nach Programmentwicklung Android & Cross-Platform Mobile Apps 4
G java.lang.NullPointerException weiß nich warum Android & Cross-Platform Mobile Apps 7
F Welches Buch zu java ME könnt ihr empfehlen? Android & Cross-Platform Mobile Apps 2
TheJavaKid handy java comiler Android & Cross-Platform Mobile Apps 5
P Java für PDA DELL Axim 51 Android & Cross-Platform Mobile Apps 4
J J2ME Java Programm im Hintergrund auf Handy laufen lassen? Android & Cross-Platform Mobile Apps 2
N Anfängerfrage - mit Java einen Anruf initiieren ? Android & Cross-Platform Mobile Apps 3
D c programm als java application aufs nokia 6230 Android & Cross-Platform Mobile Apps 2
M Java Midlet -> in einem ChoiceGroup ein TextField zur Wah Android & Cross-Platform Mobile Apps 2
H Java auf PDA Android & Cross-Platform Mobile Apps 11

Ähnliche Java Themen

Neue Themen


Oben