Foto machen und es direkt per URI speichern und auswählen

wer112

Top Contributor
Ich versuche für die Registration es hinzubekommen, das man ein Foto zu machen, um seinen Perso einzusenden.
Leider finde ich im Netz nur Sachen, wo man ein ImageView Hat und das Bild auszutauschen, um es abzuspeichern.

Möchte ohne es anzuzeigen abzuspeichern und das Bild dann als URI Packet anzuhängen den Pfand, um es später hochzuladen.

Leider weiß ich nicht, wie man es abspeichert die URI und die Bilder auszuwählen.

ps.: den Toast bekomme ich nie, habe extra deinstalliert gehabt den App Store:
Toast.makeText(getActivity(), "camera permission granted", Toast.LENGTH_LONG).show();

Der Aktuelle Code:

Java:
 private void Personal_Vorder_Kamera(){

        if(!checkPermission()){
            Toast.makeText(getActivity(), "Keine Berechtigung", Toast.LENGTH_SHORT).show();

            ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.CAMERA}, Kamera_Code);


        }else if(checkPermission()){
            Toast.makeText(getActivity(), "Berechtigung", Toast.LENGTH_LONG).show();
        }

    }

    private void Personal_Rück_Kamera(){

        if(!checkPermission()){
            Toast.makeText(getActivity(), "Keine Berechtigung", Toast.LENGTH_SHORT).show();

            ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.CAMERA}, Kamera_Code);


        }else if(checkPermission()){
            Toast.makeText(getActivity(), "Berechtigung", Toast.LENGTH_LONG).show();
        }


    }

    private void Gewerbe_Kamera(){

        if(!checkPermission()){
            Toast.makeText(getActivity(), "Keine Berechtigung", Toast.LENGTH_SHORT).show();

            ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.CAMERA}, Kamera_Code);


        }else if(checkPermission()){
            Toast.makeText(getActivity(), "Berechtigung", Toast.LENGTH_LONG).show();
        }
        
        ContentValues values = new ContentValues();
        values.put(MediaStore.Images.Media.TITLE, "Gewerbeschein");
        values.put(MediaStore.Images.Media.DESCRIPTION, "Für die Bestätigung des Unternehmens.");

        gewerbescheinURI = getActivity().getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

        Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        camera.putExtra(MediaStore.EXTRA_OUTPUT, gewerbescheinURI);

        Toast.makeText(getActivity(), "URI: " + gewerbescheinURI, Toast.LENGTH_SHORT).show();

        startActivityForResult(camera, Kamera_Code);


    }


    private Boolean checkPermission(){

        int permission = ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA);

        return permission == PackageManager.PERMISSION_GRANTED;
    }



    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == Kamera_Code) {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(getActivity(), "camera permission granted", Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(getActivity(), "camera permission denied", Toast.LENGTH_LONG).show();
            }
        }
    }

Will den Dateinamen den Text auszutauschen.

Ich wünsche euch ein angenehmen Mittwochabend.
 

KonradN

Super-Moderator
Mitarbeiter
Wenn Du das Bild an einen Server hoch laden willst, dann wirst du das nicht mehr URI machen können. Bei einer URI brauchst du ja eine universelle Adresse, die Du weiter geben kannst. Also z.B. kannst Du den Thread hier unter der URL / URI https://www.java-forum.org/thema/foto-machen-und-es-direkt-per-uri-speichern-und-auswaehlen.203064/ aufrufen. Der Server vom Forum ist halt erreichbar. Auf dem Handy hast Du das aber nicht.

Da Du das auf dem Android Handy aber nicht hast, willst Du das Bild hochladen. Dazu solltest Du viele Beispiele finden im Netz. Dabei ist es egal, ob Du das Bild erst auf dem Smartphone speicherst oder ob Du es nur im Speicher hältst. Wenn Du es anzeigst, dann hast Du es zur Verfügung und damit kannst Du es weiter geben. Und dazu brauchst Du eine Codierung. So Binary Daten kannst Du z.B. Base64 kodiert hochladen. Oder wenn Du es per Content-Encoding machst, dann kannst Du es als application/octet laufen lassen...

Auf die schnelle einfach mal ein Thread auf SO gesucht: file upload - Uploading Images to Server android - Stack Overflow
 

wer112

Top Contributor
Wenn Du das Bild an einen Server hoch laden willst, dann wirst du das nicht mehr URI machen können. Bei einer URI brauchst du ja eine universelle Adresse, die Du weiter geben kannst. Also z.B. kannst Du den Thread hier unter der URL / URI https://www.java-forum.org/thema/foto-machen-und-es-direkt-per-uri-speichern-und-auswaehlen.203064/ aufrufen. Der Server vom Forum ist halt erreichbar. Auf dem Handy hast Du das aber nicht.

Da Du das auf dem Android Handy aber nicht hast, willst Du das Bild hochladen. Dazu solltest Du viele Beispiele finden im Netz. Dabei ist es egal, ob Du das Bild erst auf dem Smartphone speicherst oder ob Du es nur im Speicher hältst. Wenn Du es anzeigst, dann hast Du es zur Verfügung und damit kannst Du es weiter geben. Und dazu brauchst Du eine Codierung. So Binary Daten kannst Du z.B. Base64 kodiert hochladen. Oder wenn Du es per Content-Encoding machst, dann kannst Du es als application/octet laufen lassen...

Auf die schnelle einfach mal ein Thread auf SO gesucht: file upload - Uploading Images to Server android - Stack Overflow
Ich werde alle Bilder mit .png in ein Zip packen und es mit einem Passwort verschlüsseln, bevor ich es hochlade auf den Server, damit unbefugte keine Personalausweißdaten von den Entwicklern erhält.

Ich erhalte so ein URI, wärend ich bei diesem Code die Kamera öfne, bevor ich es speichere: content://media/external/images/media/15406

Ist dort dann das Bild gespeichert?

Wie hole ich die Bilder daraus und packe die dann in eine Zip und dann hochladen?

Würde es per Volley hochladen wollen...

Wie mache ich das mit der URI jetzt, wo evtl. das Bild abgespeichert ist? Ich müsste das ja umbenennen.

Kenne mich diesbezüglich nicht aus.
 

Marinek

Bekanntes Mitglied
Also du möchtest ein Bild an ein Server hochladen.

Dazu benötigst du zwei Dinge: Einen Server und einen Client.

Der Server hat einen Endpunkt (e.g. Rest oder SOAP), der in der Lage ist MultiPart Daten zu erhalten. Jenachdem, was du hier benutzt, ist das recht trivial und durch hunderte Tutorials abgebildet.

https://spring.io/guides/gs/uploading-files/

oder eine google Suche.

Dann brauchst du den passenden Client: Hier Volley -


Ich bin kein Android Entwickler, die Doku sieht aber vollständig aus. Wenn du konkrete Fragen dazu hast, fühle dich gerne eingeladen hier Fragen zu stellen.

Hinweis: Eine URI kann alles sein. Zum Beispiel: content://media/external/images/media/15406

Sieht also so aus, als ob das eine URI in Android ist, die einen Contentbereich adressieren soll, media/external/images vielleicht eine SD Karte oder so.

Exkurs: Du möchtest ein Gewerbenachweis und Identitäsnachweis des Nutzers:

Für Beides gibt es elektronische Mittel. Der Personalausweis (den ich niemals in eine dubiose Webseite / App hochladen würde) unterstützt das eID Verfahren. Hiermit kann man die Daten des Ausweises elektronisch und sicher auslesen.

Beim Gewerbesschein würde ich hier mal schauen: https://www.bundesjustizamt.de/DE/T...bezentralregister/Auskunft/Auskunft_node.html

In allen anderen Fällen kann ich Fälschungen hochladen und du merkst nichts.
 

Jw456

Top Contributor
Bei dem Kamera Intent übergibst du doch in Zeile 49 deine gewerbescheinURI.

Das ist ja eine Uri die du selber mit ContentValues erstellt hast.

Genau unter diser uri ist dein Bild nach der Aufnahme.
Daraus kannst du dir das Bitmap erstellen zum anzeigen oder auch zum senden.
Anzeigen musst du es zum senden nicht.
 

Neue Themen


Oben