Netzwerk Verbindungen Java Android

wer112

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

    }
[/QUOTE]

[/QUOTE]

Da hat es auf dem einen Handy funktioniert und hat ein Rssi Wert von - 62 angezeigt, obwohl ich 4 Balken habe und sehr gut streamen kann.  Musste das so umbauen wurde vom AS geraten.

[CODE=java] private void WIFIINFO(){
        ConnectivityManager cm = null;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
            cm = getActivity().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);
        WifiInfo wifiInfo;

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

        }


        String ssid = wifiInfo.getSSID();
        Log.e("Wifiinfo", "SSID: " + ssid);

        int rssi = wifiInfo.getRssi();

        Log.e("Wifiinfo", "RSSI: " + rssi);


    }


Der WLAN Namen hat es so nicht angezeigt...

Ich musste es so machen, weißt du, wieso das nur so geht, deins ist doch bestimmt besser:

So geht das mit dem Namen:

Code:
    private void WIFIINFO(){
        ConnectivityManager cm = null;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
            cm = getActivity().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 (Build.VERSION.SDK_INT >= 30) {
            wifiInfo = (WifiInfo) netCaps.getTransportInfo();
        } else {
            WifiManager wifiMgr = (WifiManager) getActivity().getApplicationContext().getSystemService(Context.WIFI_SERVICE);
            wifiInfo = wifiMgr.getConnectionInfo();

        }

        WifiManager wifiMgr = (WifiManager) getActivity().getApplicationContext().getSystemService(Context.WIFI_SERVICE);
        WifiInfo wiInfo = wifiMgr.getConnectionInfo();


        String ssid = wiInfo.getSSID();
        Log.e("Wifiinfo", "SSID: " + ssid);

        int rssi = wifiInfo.getRssi();

        Log.e("Wifiinfo", "RSSI: " + rssi);


    }
 

wer112

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

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


}
Leider wird ein erneutes nachfrage nicht gemacht. Wenn man abgelehnt hat. Außerdem versuche ich zu verstehen, da kein Boolean beim Check ist, wie ich es dann direkt das absenden lasse...
 

Jw456

Top Contributor
Java:
 if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
     // wozu das? gib es seit API 1
            cm = getActivity().getSystemService(ConnectivityManager.class);
        }
        Network n = null;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
        // hier auch gibt es seit API 21  und in Goopgle Play kannst du nur noch min SDK 27 einstellen.
            n = cm.getActiveNetwork();
        }
        NetworkCapabilities netCaps = cm.getNetworkCapabilities(n);
        // seit API 21


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

        }
        
        
        // wiso das nochmal ohne SDK Prüfung ?
        WifiManager wifiMgr = (WifiManager) getActivity().getApplicationContext().getSystemService(Context.WIFI_SERVICE);
        WifiInfo wiInfo = wifiMgr.getConnectionInfo();
 

wer112

Top Contributor
Java:
 if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
     // wozu das? gib es seit API 1
            cm = getActivity().getSystemService(ConnectivityManager.class);
        }
        Network n = null;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
        // hier auch gibt es seit API 21  und in Goopgle Play kannst du nur noch min SDK 27 einstellen.
            n = cm.getActiveNetwork();
        }
        NetworkCapabilities netCaps = cm.getNetworkCapabilities(n);
        // seit API 21


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

        }
       
       
        // wiso das nochmal ohne SDK Prüfung ?
        WifiManager wifiMgr = (WifiManager) getActivity().getApplicationContext().getSystemService(Context.WIFI_SERVICE);
        WifiInfo wiInfo = wifiMgr.getConnectionInfo();
Bei dir hat das mit dem dBm super funktioniert. Aber wenn ich Manuell auf zulassen drücke, bekomme ich bei dir nur <unknow SSID> als WLAN Name. Da dachte ich, dass mit der WIFIInfo und so für das dBm sein könnte, da das mit dem Namen da nicht bei mir funktioniert hatte.

Nach dem ich das wieder entfernt hatte, hat es jetzt plötzlich funktioniert. evtl. geht es nur manchmal nicht.

Also sieht der Code so aus.:

Java:
   ConnectivityManager cm = null;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            cm = getActivity().getSystemService(ConnectivityManager.class);
        }
        Network n = null;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            n = cm.getActiveNetwork();
        }
        NetworkCapabilities netCaps = cm.getNetworkCapabilities(n);


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

        }




        String ssid = wifiInfo.getSSID();
        Log.e("Wifiinfo", "SSID: " + ssid);

        int rssi = wifiInfo.getRssi();

        wifi_stearke = rssi + " dBm";

        Log.e("Wifiinfo", "RSSI: " + rssi);

        Absenden();


Leider ist eine Berechtigungsabfrage bei Negativ oder so nicht möglich. Irgendwie kann ich es nicht weiter verarbeiten. Kommt nixs an, beim RequestPermission.:

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

                //int networkCapabilities = NetworkCapabilities.TRANSPORT_WIFI;
                //wifi_name = NetworkCapabilities.

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


                int level = WifiManager.calculateSignalLevel(wifiInfo.getRssi(), 6);



                wifi_stearke = "" + 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";

                    if(checkPermissions()){

                        errorText.setText("Berechtigung");

                        if(abgelehntPermission()){
                            errorText.setText("Abgelehnte Berrechtigung");
                            trustPermission();
                        }else{
                            WIFIINFO();
                        }
                    }else{
                        errorText.setText("Keine Berechtigung");
                        trustPermission();
                    }



                }

            }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!");
                }
            }

        }
    }

    private boolean abgelehntPermission(){
        int result = ContextCompat.checkSelfPermission(getActivity(),Manifest.permission.ACCESS_FINE_LOCATION);

        return result == PackageManager.PERMISSION_DENIED;
    }

    protected void trustPermission(){

        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(getActivity(), 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(getActivity(), permissions, ACCESS_FINE_LOCATION_PERMISSION_CODE);
        } else {
            final int[] grantResults = new int[REQUIRED_SDK_PERMISSIONS.length];
            Arrays.fill(grantResults, PackageManager.PERMISSION_GRANTED);
            onRequestPermissionsResult(ACCESS_FINE_LOCATION_PERMISSION_CODE, REQUIRED_SDK_PERMISSIONS,
                    grantResults);
        }

    }


    private boolean checkPermissions () {

        //int result = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION);


        int result = 0, result1 = 0;

        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.TIRAMISU) {
            result = ContextCompat.checkSelfPermission(getActivity(),Manifest.permission.ACCESS_FINE_LOCATION);
            result1 = ContextCompat.checkSelfPermission(getActivity(),Manifest.permission.NEARBY_WIFI_DEVICES);

        }else{
            result = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION);
        }

        return result == PackageManager.PERMISSION_GRANTED && result != PackageManager.PERMISSION_DENIED|| result == PackageManager.PERMISSION_GRANTED && result != PackageManager.PERMISSION_DENIED &&   result1 == PackageManager.PERMISSION_GRANTED && result1 != PackageManager.PERMISSION_DENIED;
        }



        @Override
        public void onRequestPermissionsResult ( int requestCode, @NonNull String permissions[],
        @NonNull int[] grantResults){
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            }
            Log.e("Pre" ,"Permissionscode: " + requestCode);
            switch (requestCode) {

                case ACCESS_FINE_LOCATION_PERMISSION_CODE:
                    for (int index = permissions.length - 1; index >= 0; --index) {
                        if (grantResults[index] != PackageManager.PERMISSION_GRANTED) {

                            return;
                        }
                    }
                    // all permissions were granted
                    WIFIINFO();
                    break;
            }
        }

Habe den Boolean Check extra umgebaut, damit auch das Nerby rein passt, wenn es passt. Laut Anzeige, zeigt es richtig an, ob Berechtigung oder keine, kommt aber nicht rein.

Früher Boolean abfrage:
Code:
 private boolean checkPermissions () {

       int result = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION);


        return result == PackageManager.PERMISSION_GRANTED;
        }


Das ist das Problem, ich komme da nie rein erst:

Java:
        @Override
        public void onRequestPermissionsResult ( int requestCode, @NonNull String permissions[],
        @NonNull int[] grantResults){
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            }
            Log.e("Pre" ,"Permissionscode: " + requestCode);
            switch (requestCode) {

                case ACCESS_FINE_LOCATION_PERMISSION_CODE:
                    for (int index = permissions.length - 1; index >= 0; --index) {
                        if (grantResults[index] != PackageManager.PERMISSION_GRANTED) {

                            return;
                        }
                    }
                    // all permissions were granted
                    WIFIINFO();
                    break;
            }

Außerdem soll ja noch geprüft werden, ob es bereits abgelehnt ist und wenn es abgelehnt ist, dass die Berechtigung erneut angezeigt bekommt und danch auch das Geld abgeschick wird....

Ps.: Ein Verwendungszweck Feld wurde beim Geld senden eingebaut, dass es auch funktioniert.
 

wer112

Top Contributor
deshalb setze das prüfen auf API 33.

dein wifiInfo ist sicher auich null bei API 31 .
ein android 13 handy habe ich nicht zum testen.
Ich verstehe grade nicht was du meinst, mit deiner jetzigen aussage. Geht es um um RequestPermission, was net geht, oder über das erneute Abfragen oder über die Wlan Infos, was nun mit dem von AS vorgeschlagenen Code-> wo du den Teil gegeben hast?
 

Jw456

Top Contributor
private boolean checkPermissions () { int result = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION); return result == PackageManager.PERMISSION_GRANTED; }
Wenn die Permission nicht ganted ist dann rufst du doch gar nicht "requestPermissions(..." auf.
Somit wird auch die dazugehörige Callback Methode nicht aufgerufen.


Mache dir doch nochmal Klar wie das abläuft. Lese es noch mal nach.
Google gibt dir auch code Beispiele.

 
Zuletzt bearbeitet:

wer112

Top Contributor
Wenn die Permission nicht ganted ist dann rufst du doch gar nicht "requestPermissions(..." auf.
Somit wird auch die dazugehörige Callback Methode nicht aufgerufen.
Die Methode rufe ich doch auf, wenn ich das Fenster was gedrückt habe. Aber ich komme da nie an.
Und wenn man auf "nicht zulassen" gedrückt hat, soll es wieder gefragt werden, sonst ist ein versenden nicht möglich.
1. ich kann die Auswahl im request nicht weiter bearbeiten, nach dem ich es ausgewählt habe
2. muss irgendwie das erneut abrufen können, wenn man auf nicht zulassen gewählt hat..
 

Jw456

Top Contributor
von Google kopiert
Java:
  if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) ==
                PackageManager.PERMISSION_GRANTED) {
            // You can use the API that requires the permission.
            performAction(...);
        } else if (shouldShowRequestPermissionRationale(...)){
            // In an educational UI, explain to the user why your app requires this
            // permission for a specific feature to behave as expected, and what
            // features are disabled if it's declined. In this UI, include a
            // "cancel" or "no thanks" button that lets the user continue
            // using your app without granting the permission.
            showInContextUI(...);
        } else{
            // You can directly ask for the permission.
            requestPermissions(this,
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    REQUEST_CODE
            );
        }
 

Jw456

Top Contributor
beachte auch
At the same time, your app should respect the user's decision to deny a permission. Starting in Android 11 (API level 30), if the user taps Deny for a specific permission more than once during your app's lifetime of installation on a device, the user doesn't see the system permissions dialog if your app requests that permission again. The user's action implies "don't ask again." On previous versions, users saw the system permissions dialog each time your app requested a permission, unless they had previously selected a "don't ask again" checkbox or option.

If a user denies a permission request more than once, this is considered a permanant denial. It's very important to only prompt users for permissions when they need access to a specific feature, otherwise you might inadvertently lose the ability to re-request permissions.

In certain situations, the permission might be denied automatically, without the user taking any action. (A permission might be granted automatically as well.) It's important to not assume anything about automatic behavior. Each time your app needs to access functionality that requires a permission, check that your app is still granted that permission.
 

wer112

Top Contributor
beachte auch
At the same time, your app should respect the user's decision to deny a permission. Starting in Android 11 (API level 30), if the user taps Deny for a specific permission more than once during your app's lifetime of installation on a device, the user doesn't see the system permissions dialog if your app requests that permission again. The user's action implies "don't ask again." On previous versions, users saw the system permissions dialog each time your app requested a permission, unless they had previously selected a "don't ask again" checkbox or option.

If a user denies a permission request more than once, this is considered a permanant denial. It's very important to only prompt users for permissions when they need access to a specific feature, otherwise you might inadvertently lose the ability to re-request permissions.

In certain situations, the permission might be denied automatically, without the user taking any action. (A permission might be granted automatically as well.) It's important to not assume anything about automatic behavior. Each time your app needs to access functionality that requires a permission, check that your app is still granted that permission.
Und wenn er sich anders entscheidet? Kann man ja den Nutzer ja, nachdem er auf nicht zulassen gedrückt hat, ihn informieren? Aber dazu muss man doch in den request erstmal hereinkommen um es zu verarbeiten, was gedrückt worden ist. Bzw. ein Help Menü einrichten für später.
 

wer112

Top Contributor
von Google kopiert
Java:
  if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) ==
                PackageManager.PERMISSION_GRANTED) {
            // You can use the API that requires the permission.
            performAction(...);
        } else if (shouldShowRequestPermissionRationale(...)){
            // In an educational UI, explain to the user why your app requires this
            // permission for a specific feature to behave as expected, and what
            // features are disabled if it's declined. In this UI, include a
            // "cancel" or "no thanks" button that lets the user continue
            // using your app without granting the permission.
            showInContextUI(...);
        } else{
            // You can directly ask for the permission.
            requestPermissions(this,
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    REQUEST_CODE
            );
        }
in die Request?
 

wer112

Top Contributor
Was soll die Frage?
Denke doch mal selber darüber nach.
wenn ich es noch mal anschaue, könnte es ein ersatz für mein Boolean sein. Wenn es bestätigt ist, dann Absenden();
wenn ??????
wenn nicht, dann muss man es bestätigen lassen.
Wo und wann muß "requestPermissions(this,..."
Aufgrufen werden.
Request wid nachdem man eine Auswahl getroffen hat aufgerufen, wemm man eine Anfrage wie on ActiyityResult macht oder so...
Was macht der Aufruf?
Um das Gedrückte auszuwerten und weiterzuverarbeiten. Entweder drückt er ja, dann passiert, dann das oder er hat nein gedrückt, dann passiert das. Das dort es verarbeitet wird....
Was sieht dann der User?
Das was man will. das kommt drauf an, was man in der Methode festlegt, muss man nicht, da es auch backend laufen kann und nicht auch fronted, außer man will das so.

Mein Log.e kommt gar nicht an dort....
Wo kommt dein Ergebnis dieses Aufrufes an?
?
 

Jw456

Top Contributor
Ich meine, wenn ich von den Möglichkeiten was ausgewählt habe, dass ich eigentlich dorthin müsste, was eben laut Logcat nicht geht und so.
Du scheinst es immer noch nicht verstanden zu haben.

Wenn dein ContextCompat.checkSelfPermission
Nicht die Permission hat dann musst du den user fragen um Erlaubnis fragen
Und dies machst du der requestPermissions Methode.

Ich hoffe das ist jetzt verstanden.

Du kannst den user nur mit dieser Methode fragen. Keine eigne Methode.
 

Jw456

Top Contributor
Ps nur der Aufruf von requestPermissions

Bringt dich in die callback Methode.

Und der Aufruf zeigt den User Dialog an. Nichts anderes. Ein eigner Dialog zum Permission erfragen ist Mist.
 

wer112

Top Contributor
Du scheinst es immer noch nicht verstanden zu haben.

Wenn dein ContextCompat.checkSelfPermission
Nicht die Permission hat dann musst du den user fragen um Erlaubnis fragen
Und dies machst du der requestPermissions Methode.

Ich hoffe das ist jetzt verstanden.

Du kannst den user nur mit dieser Methode fragen. Keine eigne Methode.
wenn das Abfragefenster aufgeht, kann ich nixs dort drinnen erfangen... Wieso?
 

Jw456

Top Contributor
Was willst du da erfragen?
Da gibt es ja ich stimme zu erteile die Berechtigung oder eben nicht.
Wie auch in der Doku steht wird der user nach mehrfachen nein sagen nicht mehr belästigt. Mit dem Dialog.

Lösche immer die App vom Handy damit die schon erteilten Berechtigen wider gelöscht werden.

Zeige ein Bild Screenshot von den Dialog. Von dem du sprichst.
 

wer112

Top Contributor
Wenn ich diese Berechtigung bekomme, kann man grundsätzlich die Antwort weiterverarbeiten. Und ja ich habe verstanden, dass es nur 1 mal anzeigt, wenn man einmal ausgewählt hat. Immer zulassen gibt es da nicht. Und danach zeigt es nicht mehr an. Habe ich verstanden, darum überlege ich, ob ich eine Anleitung im Toolbar hereinmache, wenn derjenige sich umentscheidet und manuell erteilen will. Aber das Weiterverarbeiten geht leider nicht.
Screenshot_20230903_172806_Permission_controller[1].jpg
 

wer112

Top Contributor
Was willst du da erfragen?
Da gibt es ja ich stimme zu erteile die Berechtigung oder eben nicht.
Wie auch in der Doku steht wird der user nach mehrfachen nein sagen nicht mehr belästigt. Mit dem Dialog.
Wird eh nicht gehen, da man nach einmal nein, das eh nicht mehr anzeigen kann. Es geht grade ums Weiterverarbeiten der Antwort.
 

Marinek

Bekanntes Mitglied
Das ist ja ein systemdialog. Da kannst und musst nix da weiterverarbeiten. Du kannst ja jederzeit prüfrnnob die Berechtigung vorliegt.

Ich bin kein Android Entwickler. Aber in der Anleitung ist ja ein Bild was man machen soll.
 

Jw456

Top Contributor
Java:
} else if (shouldShowRequestPermissionRationale(...)){ // In an educational UI, explain to the user why your app requires this // permission for a specific feature to behave as expected, and what // features are disabled if it's declined. In this UI, include a // "cancel" or "no thanks" button that lets the user continue // using your app without granting the permission. showInContextUI(...); } else{

Hast du dir das mal angesehen?
 

wer112

Top Contributor
Das ist ja ein systemdialog. Da kannst und musst nix da weiterverarbeiten. Du kannst ja jederzeit prüfrnnob die Berechtigung vorliegt.

Ich bin kein Android Entwickler. Aber in der Anleitung ist ja ein Bild was man machen soll.
Ja, Das erneute Abfragen, kann man ja machen, wenn der Vorgang abgeschlossen ist. Wen man eine App daraus installiert, geht ein Instalationsfenster auf, ob man die APK installieren will oder nicht. Wenn man was gedrückt hat, bekomme ich das in
Java:
 @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    }
zurück und kann aufgrund der Information was der Nutzer gedrückt hat, weiterverarbeiten.
Wenn der Vorgang die Überprüfung kann man wieder aufrufen den Check. Aber wenn er nein gedrückt hat, wo Jw456 gesagt hat, das es nur einmal angezeigt wird, da man es respektieren muss, dass man ein Hinweiß Dialog zeigen kann.

Mein Hamster dreht, sonst zulange am Rad... Möchte das ausgewählte verarbeiten... Wie es bei vielen Sachen geht. Galerie,... Drive,...:
 

wer112

Top Contributor
Java:
} else if (shouldShowRequestPermissionRationale(...)){ // In an educational UI, explain to the user why your app requires this // permission for a specific feature to behave as expected, and what // features are disabled if it's declined. In this UI, include a // "cancel" or "no thanks" button that lets the user continue // using your app without granting the permission. showInContextUI(...); } else{

Hast du dir das mal angesehen?
1. Weiß da grade nicht, wo e alleine hingehört und was das mit dem shouldShow macht. Habe extra gefragt vorhin. Und ob ich richtig liege. Werde mal schauen, was das ist, ob ich was finde im Netz..
 

wer112

Top Contributor
Post #60
Google Doku.
Aso die Übersetzung, aber weiß nicht, ob das alleine in die Request Methode kommt oder in die protected void trustPermission() oder private boolean checkPermissions () oder public void onRequestPermissionsResult Stand da nicht, ob man alles wieder rauslöschen soll oder umbauen muss....
 

Marinek

Bekanntes Mitglied
Du bist viel zu hektisch.

Die Leute sagen dir. Du kannst die Antwort des Users mittels Schaltflächen nicht verarbeiten. Dein Programm wird darüber nicht informiert.

Aber das Ergebnis kannst du doch prüfen indem du die entsprechenden Methoden nutzt.

So wie es ausschaut lässt du dir die android Developer Doku übersetzen. Ohne fundierte englische Kenntnisse wird das schwer werden später im Job.

Du musst dir die Zeit nehmen die gepusteten Sachen durchzulesen und zu verstehen.

Du antwortest ja hier keine 15 min später. In der Zeit kann man das nicht gelesen und verstanden haben.

Immer wieder die gleiche Frage zu wiederholen ist auch nicht sinnvoll.
 

wer112

Top Contributor

Wenn ich das Fenster erhalte, dann wurde ja erstmal diese Methode aufgerufen:
Java:
    @Override
        public void onRequestPermissionsResult ( int requestCode, @NonNull String permissions[],
        @NonNull int[] grantResults){
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
                aLoadingDialog.dismiss();
            }
            Log.e("Pre" ,"Permissionscode: " + requestCode);
            switch (requestCode) {

                case ACCESS_FINE_LOCATION_PERMISSION_CODE:
                    for (int index = permissions.length - 1; index >= 0; --index) {
                        if (grantResults[index] != PackageManager.PERMISSION_GRANTED) {
                            aLoadingDialog.dismiss();
                            return;
                        }
                    }
                    // all permissions were granted
                    WIFIINFO();
                    break;
            }
        }

?

Und dann wählt der Nutzer aus, ob er zu stimmt oder nicht.

Wie kann ich das machen, dass mein Hamsterrad anhält, nachdem es gedrückt wurden ist?

Siehe Foto:
Screenshot_20230910_101313_Klug_Store[1].jpg

Das soll ja anhalten. Wo füge ich diesen aLoadingDialog.dismiss(); ein?


In der Oben gezwigten Methode, bekomme ich keine Werte rein, im Log. Oder wo anders einfügen?

Das WIFIINFO soll ja auch ausgeführt werden.

UND SEHR WICHTIG: Das soll sich auch beenden, wenn man das Fenster wegclickt ohne was auszuwählen, das kommt dann eh erneut..
 
Zuletzt bearbeitet:

Jw456

Top Contributor
Und dann wählt der Nutzer aus, ob er zu stimmt oder nicht.
nein das hat er schon wenn du in die Methode kommst.


Erstens die abfrage nach der Versions Nummer M buchst du hier nicht.
Die super Methode sollte immer aufgerufen werden.

Was ist denn das beenden deines Dialog Hamster? Wie hast du den aufghrufen?
Soll das etwas „aLoadingDialog.dismiss();“ sein?
 

wer112

Top Contributor
nein das hat er schon wenn du in die Methode kommst.


Erstens die abfrage nach der Versions Nummer M buchst du hier nicht.
Die super Methode sollte immer aufgerufen werden.

Meinst du hier? Ich bekomme kein Log darein, nirgendswo in der Methode:
Java:
  @Override
        public void onRequestPermissionsResult ( int requestCode, @NonNull String permissions[],
        @NonNull int[] grantResults){
            aLoadingDialog.dismiss();

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
                Log.e("JSON Filter", "Wird aufgerufen");
            }
            Log.e("Pre" ,"Permissionscode: " + requestCode);
Was ist denn das beenden deines Dialog Hamster?
beendet wird mit aLoadingDialog.dismiss();
Wie hast du den aufghrufen?
aLoadingDialog.show();
Soll das etwas „aLoadingDialog.dismiss();“ sein?
Ja.
 

wer112

Top Contributor
wo hast du den Dialog erstellt?
In der OnCreateView(Ps.: System ist noch veraltet und ich weiß du hast ein besseres Design gegeben)
da wird es aufgerufen: aLoadingDialog = new ALoadingDialog(getActivity());

Wenn die BErrechtigung bereits erteilt ist, funktioniert alles mit dem Hamster beim Senden und Laden. Wechsel das alles aus, das sieht besser aus, als ein langweiliges Processvar rad...
Hast du in der Callback Methode auch den context auf den Dialog ?
Mehr als die Einbindung wird bzw. wurde nicht gebraucht. Als die Klasse aufzurufen und dann .show zu machen.
 

Jw456

Top Contributor
dieses Log "Log.e("Pre" ,"Permissionscode: " + requestCode);"
kommt also nicht. Dann kommst du auch nicht in die Methode.


Du scheinst ja auch gleich mehrere Permission gleichzeitig zu prüfen und abzufragen. Es werden wohl mehrere Systemdialoge erscheinen und erst wenn alle Dialoge bearbeitet sind geht es in die Callback Methode.

Deswegen ist eigentlich das switch case auch etwas sinnlos.
Wenn du damit arbeiten willst dann solltest du die Permission einzeln erfragen.
 

wer112

Top Contributor
dieses Log "Log.e("Pre" ,"Permissionscode: " + requestCode);"
kommt also nicht. Dann kommst du auch nicht in die Methode.
Habe ich schon die ganze Zeit gesagt, ich komme da nicht rein. Egal ob ich ganz am Anfang den Log mache.
Du scheinst ja auch gleich mehrere Permission gleichzeitig zu prüfen und abzufragen. Es werden wohl mehrere Systemdialoge erscheinen und erst wenn alle Dialoge bearbeitet sind geht es in die Callback Methode.
Das hast du mir ja so gegeben. Soll ich nur den ACCESS_FINE_LOCATION abfragen, nicht den Speicherplatz, das wird ja beim Download(was aktuell eh nicht mehr geht) abgefragt und das Nerby, wird ja ab eine höhere API gefragt.

Deswegen ist eigentlich das switch case auch etwas sinnlos.
Wenn du damit arbeiten willst dann solltest du die Permission einzeln erfragen.
Wie stelle ich dein Code um?

Und kann man nach dem Trücken, es erneut prüfen, ob was gedrückt wurden ist(checkPermission();) und dann es direkt absenden.
Und nach der einzelnen Prüfung den Dialog beenden?

Der Dialog wird im Hintergrund angezeigt, wenn das Fenster erscheint, hat also nixs damit zu tun..
 

wer112

Top Contributor
dann zeige doch mal wie du jetzt die Permission erfragst.
Dein Code + die ganzen Abfragen. Ist auch viel Müll wahrscheinlich dabei:

Java:
        kundennummer = kundennummer_edit.getText().toString().trim();
        betrag = betrag_edit.getText().toString().trim();
        verwendungszweck = verwendungszweck_edit.getText().toString().trim();

        if (kundennummer.isEmpty() | betrag.isEmpty()){

            if (kundennummer.isEmpty()){
                kundennummer_edit.setError("Kundennummer ist leer!");
                kundennummer_edit.requestFocus();
            }else if (betrag.isEmpty()){
                betrag_edit.setError("Betrag ist leer!");
                betrag_edit.requestFocus();

            }else if (kundennummer.isEmpty() && betrag.isEmpty()){
                kundennummer_edit.setError("Kundennummer ist leer!");
                kundennummer_edit.requestFocus();

                betrag_edit.setError("Betrag ist leer!");
                betrag_edit.requestFocus();

            }



        }else {

            if (verwendungszweck.isEmpty()){
                verwengungsanzahl = "kein Verwendungszweck";
            }else{
                verwengungsanzahl = "Verwendungszweck";
            }

            aLoadingDialog.show();
            //Prüfen, ob Wlan an ist oder Mobile daten

            InternetProvider();


        }


    }

    private void InternetProvider(){
        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");

                //int networkCapabilities = NetworkCapabilities.TRANSPORT_WIFI;
                //wifi_name = NetworkCapabilities.

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


                int level = WifiManager.calculateSignalLevel(wifiInfo.getRssi(), 6);



                wifi_stearke = "" + 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";

                    if(checkPermissions()){

                        errorText.setText("Berechtigung");

                        if(abgelehntPermission()){
                            errorText.setText("Abgelehnte Berrechtigung");
                            trustPermission();
                        }else{
                            WIFIINFO();
                        }
                    }else{
                        errorText.setText("Keine Berechtigung");
                        trustPermission();
                    }



                }

            }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!");
                }
            }

        }
    }

    private boolean abgelehntPermission(){
        int result = ContextCompat.checkSelfPermission(getActivity(),Manifest.permission.ACCESS_FINE_LOCATION);

        return result == PackageManager.PERMISSION_DENIED;
    }

    protected void trustPermission(){

        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(getActivity(), 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(getActivity(), permissions, ACCESS_FINE_LOCATION_PERMISSION_CODE);

        } else {
            final int[] grantResults = new int[REQUIRED_SDK_PERMISSIONS.length];
            Arrays.fill(grantResults, PackageManager.PERMISSION_GRANTED);
            onRequestPermissionsResult(ACCESS_FINE_LOCATION_PERMISSION_CODE, REQUIRED_SDK_PERMISSIONS,
                    grantResults);
        }

    }


     private void Checkerneut(){

        if(checkPermissions()){
            alertDialoghinweiß.dismiss();
            WIFIINFO();

        }
     }
    private boolean checkPermissions () {

        //int result = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION);


        int result = 0, result1 = 0;

        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.TIRAMISU) {
            result = ContextCompat.checkSelfPermission(getActivity(),Manifest.permission.ACCESS_FINE_LOCATION);
            result1 = ContextCompat.checkSelfPermission(getActivity(),Manifest.permission.NEARBY_WIFI_DEVICES);

        }else{
            result = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION);
        }

        return result == PackageManager.PERMISSION_GRANTED && result != PackageManager.PERMISSION_DENIED|| result == PackageManager.PERMISSION_GRANTED && result != PackageManager.PERMISSION_DENIED &&   result1 == PackageManager.PERMISSION_GRANTED && result1 != PackageManager.PERMISSION_DENIED;
        }



        @Override
        public void onRequestPermissionsResult ( int requestCode, @NonNull String permissions[],
        @NonNull int[] grantResults){
            aLoadingDialog.dismiss();

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
                Log.e("JSON Filter", "Wird aufgerufen");
            }
            Log.e("Pre" ,"Permissionscode: " + requestCode);
            switch (requestCode) {

                case ACCESS_FINE_LOCATION_PERMISSION_CODE:
                    for (int index = permissions.length - 1; index >= 0; --index) {
                        if (grantResults[index] != PackageManager.PERMISSION_GRANTED) {
                            aLoadingDialog.dismiss();
                            return;
                        }
                    }
                    // all permissions were granted
                    WIFIINFO();
                    break;
            }
        }


    private void WIFIINFO(){
        ConnectivityManager cm = null;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            cm = getActivity().getSystemService(ConnectivityManager.class);
        }
        Network n = null;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            n = cm.getActiveNetwork();
        }
        NetworkCapabilities netCaps = cm.getNetworkCapabilities(n);


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

        }




        String ssid = wifiInfo.getSSID();
        Log.e("Wifiinfo", "SSID: " + ssid);

        int rssi = wifiInfo.getRssi();

        wifi_stearke = rssi + " dBm";

        Log.e("Wifiinfo", "RSSI: " + rssi);

        Absenden();
    }
 

Jw456

Top Contributor
Das Prüfen der Permission machst du ja öfters in deinen Code.
Aber wenn die sie nicht vorhanden ist fragst nicht neu nach. Das Nachfragen erfolgt wie schon gesagt mit „ActivityCompat.requestPermissions“
Das machst du zb. in deiner abgelehntPermission() Methode nicht. Somit kommst du ach nicht in die Callback.
Ich glaube es ist besser für dich, wenn du alle Permission einzeln separat host und abfragst. Alle auf einmal das scheint dich nur zu verwirren.

hier nur ein beisiel
Java:
 protected void checkPermissionsFineLocation() {
        int permissionCheck = ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION);
        if (!(permissionCheck == PackageManager.PERMISSION_GRANTED)) {
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    ACCESS_FINE_LOCATION_PERMISSION_CODE);

        } else {
            // got permission use it
        
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[],
                                           @NonNull int[] grantResults) {

        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case ACCESS_FINE_LOCATION_PERMISSION_CODE:
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    // permission was granted, do your work....
                  
                } else {
                    // permission denied
                    // Disable the functionality that depends on this permission.
                }
                break;
        }
    }
 

wer112

Top Contributor
Das Prüfen der Permission machst du ja öfters in deinen Code.
Aber wenn die sie nicht vorhanden ist fragst nicht neu nach. Das Nachfragen erfolgt wie schon gesagt mit „ActivityCompat.requestPermissions“
Das machst du zb. in deiner abgelehntPermission() Methode nicht. Somit kommst du ach nicht in die Callback.
Ich glaube es ist besser für dich, wenn du alle Permission einzeln separat host und abfragst. Alle auf einmal das scheint dich nur zu verwirren.

hier nur ein beisiel
Java:
 protected void checkPermissionsFineLocation() {
        int permissionCheck = ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION);
        if (!(permissionCheck == PackageManager.PERMISSION_GRANTED)) {
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    ACCESS_FINE_LOCATION_PERMISSION_CODE);

        } else {
            // got permission use it
       
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[],
                                           @NonNull int[] grantResults) {

        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case ACCESS_FINE_LOCATION_PERMISSION_CODE:
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    // permission was granted, do your work....
                 
                } else {
                    // permission denied
                    // Disable the functionality that depends on this permission.
                }
                break;
        }
    }
Entweder habe ich die Erweiterung falsch gemacht oder WIFIInfo und so kommt dda nicht hin.

Ich komme immer noch nicht in die Methode rein!

Oder die ganze Verkopplung nicht richtig. Das Fenster zeigt sich, aber die Aufgaben, wenn es genehmigt ist oder nicht gehen nicht.

Code:
Java:
                    if(checkPermissions()){

                        errorText.setText("Berechtigung");

                        if(abgelehntPermission()){
                            errorText.setText("Abgelehnte Berrechtigung");
                            trustPermission();
                        }else{
                            WIFIINFO();
                        }
                    }else{
                        errorText.setText("Keine Berechtigung");
                        trustPermission();
                    }



                }

            }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!");
                }
            }

        }
    }

    private boolean abgelehntPermission(){
        int result = ContextCompat.checkSelfPermission(getActivity(),Manifest.permission.ACCESS_FINE_LOCATION);

        return result == PackageManager.PERMISSION_DENIED;
    }

    protected void trustPermission(){

        int permissionCheck = ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION);
        int nearbyCheck = ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.NEARBY_WIFI_DEVICES);

        if (!(permissionCheck == PackageManager.PERMISSION_GRANTED)) {
            ActivityCompat.requestPermissions(getActivity(),
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    ACCESS_FINE_LOCATION_PERMISSION_CODE);

        } else if ((permissionCheck == PackageManager.PERMISSION_GRANTED)){
            // got permission use it

            if (Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.TIRAMISU){

                if (!(nearbyCheck == PackageManager.PERMISSION_GRANTED)) {
                    ActivityCompat.requestPermissions(getActivity(),
                            new String[]{Manifest.permission.NEARBY_WIFI_DEVICES},
                            NEARBY_WIFI_DEVICES_PERMISSION_CODE);

                }else{
                    // got permission use it
                    WIFIINFO();
                }



            }else{
                // got permission use it
                WIFIINFO();

            }

        }

    }


     private void Checkerneut(){

        if(checkPermissions()){
            alertDialoghinweiß.dismiss();
            WIFIINFO();

        }
     }
    private boolean checkPermissions () {

        //int result = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION);


        int result = 0, result1 = 0;

        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.TIRAMISU) {
            result = ContextCompat.checkSelfPermission(getActivity(),Manifest.permission.ACCESS_FINE_LOCATION);
            result1 = ContextCompat.checkSelfPermission(getActivity(),Manifest.permission.NEARBY_WIFI_DEVICES);

        }else{
            result = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION);
        }

        return result == PackageManager.PERMISSION_GRANTED && result != PackageManager.PERMISSION_DENIED|| result == PackageManager.PERMISSION_GRANTED && result != PackageManager.PERMISSION_DENIED &&   result1 == PackageManager.PERMISSION_GRANTED && result1 != PackageManager.PERMISSION_DENIED;
        }



        @Override
        public void onRequestPermissionsResult ( int requestCode, @NonNull String permissions[],
        @NonNull int[] grantResults){
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            switch (requestCode) {
                case ACCESS_FINE_LOCATION_PERMISSION_CODE:

                    if (grantResults.length > 0
                            && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                        // permission was granted, do your work....
                        WIFIINFO();

                    } else {
                        // permission denied
                        // Disable the functionality that depends on this permission.
                        aLoadingDialog.dismiss();
                        info.setVisibility(View.VISIBLE);

                    }

                    break;
                case NEARBY_WIFI_DEVICES_PERMISSION_CODE:
                    if (grantResults.length > 0
                            && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                        // permission was granted, do your work....

                    } else {
                        // permission denied
                        // Disable the functionality that depends on this permission.
                    }
                break;
            }
        }


    private void WIFIINFO(){
        aLoadingDialog.dismiss();

Selbst mit Log, komme ich da nie rein:

Java:
@Override
        public void onRequestPermissionsResult ( int requestCode, @NonNull String permissions[],
        @NonNull int[] grantResults){
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            Log.e("JSON Filter", "" + requestCode);
 

Jw456

Top Contributor
abgelehntPermission() und auch checkPermissions () sind für mich sinnlose unnütze Methoden.

Baue deinen Code sinnvoller auf nicht so viele If else Verzeigungen, da sieht keiner durch.

Berschtigungenen prüft am Anfang vom Code. Hat man keine bekommen.
Brauchst du im Code gar nicht weiter machen. Die Info kannst du dem User ja in der Callback geben wenn er abgelehnt hat.
Dann ist hat der Code zu ende.
Auch in der trustPermission kannst du den User Informieren das wenn er die Berechtigung nicht erteilt das Programm nicht weiter läuft.

Die Berechtigung kannst und solltest du schon am Anfang zb in der InternetProvider Methode holen.
Hast du keine bekommen geht es nicht weiter im code. So einfach.
 

wer112

Top Contributor
abgelehntPermission() und auch checkPermissions () sind für mich sinnlose unnütze Methoden.
das Prüfen macht das TrustPermission Methode Und dann weiter machen. Hat der Code so gepasst, den ich erweitert hatte?
Baue deinen Code sinnvoller auf nicht so viele If else Verzeigungen, da sieht keiner durch.

Berschtigungenen prüft am Anfang vom Code. Hat man keine bekommen.
Brauchst du im Code gar nicht weiter machen. Die Info kannst du dem User ja in der Callback geben wenn er abgelehnt hat.
Dann ist hat der Code zu ende.
Auch in der trustPermission kannst du den User Informieren das wenn er die Berechtigung nicht erteilt das Programm nicht weiter läuft.
Ich kann den Nutzer nicht informieren.
Die Berechtigung kannst und solltest du schon am Anfang zb in der InternetProvider Methode holen.
Hast du keine bekommen geht es nicht weiter im code. So einfach.

Wird schwierig.. Werde schauen wie ich das umsetzten kann.

Als
 
Ä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
W ListView fehler: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference Android & Cross-Platform Mobile Apps 5
S Android API 35+ Status/Navigation bar color/height from Java Android & Cross-Platform Mobile Apps 0
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

Ähnliche Java Themen


Oben