Foto von der Kamera im internal Storage abspeichern

  • Hallo zusammen,


    ich habe folgendes Problem: Ich möchte, dass eins mit der Kamera geschossenes Foto im internal Storage meiner App abgespeichert wird. Die Kamera App hat jedoch keine Schreibrechte in meinen Ordner zu schreiben, daher benutze ich einen FileProvider um mit einer URI den Zugriff zu erlauben. In der Android Doku wird es so beschrieben. Jedoch funktioniert das nicht. Der Einzige Unterschied zum Beispiel aus der Android Doku ist, dass dort " File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES)" verwendet wird, was ich jedoch nicht möchte, da der Befehl auf die SD-Karte zugreift.
    Kann mir da jemand weiterhelfen?

    Code
    <?xml version="1.0" encoding="utf-8"?>
    <paths>
        <files-path name="imagepath" path="images/"/>
    </paths>
    Code
    <provider
                android:name="android.support.v4.content.FileProvider"
                android:authorities="de.mypackage.fileprovider"
                android:exported="false"
                android:grantUriPermissions="true">
                <meta-data
                    android:name="android.support.FILE_PROVIDER_PATHS"
                    android:resource="@xml/imagepath" />
            </provider>
  • hallo


    String dirpath = "/data/data/" + getPackageName();dies ist dein home Verzeichnis der app. Kann nur mit Rootrechten außerhalb der app besichtigt werden.lege dort am besten ein Verzeichnis für deine Bilder an.wiso willst du dort Bilder von der cam speichern. Diese Bilder kannst du dann nur in deiner app sehen.der Speicherplatz wird auch unnötig belastet.

  • Na weil ohne die App die Bilder weg sind....... (Die SuperUser mal außen vor)
    Auch eine Art User zu behalten.
    :thumbup: :thumbup: :thumbup:


    Aber mal zum Speicherplatz den du erwähnt hast, wie groß ist denn der für so eine App?

    Kann Spuren von persönlicher Meinung, Sarkasmus und Lakritz enthalten. Einzelne Wörter nicht für den Verzehr geeignet. Ungelesen mindestens haltbar bis: suche bei Google

  • hallo Fischkralle was meinst du mit Auch eine Art User zu behalten? Wie so sind die Bilder weg? Die cam speichert die Bilder entweder auf der internen sdcard oder auf der externen sdkarte die du auch tauschen kannst. Oder sprechen wir von einen sehr alten Handy?

  • Also,
    ich habe das jetzt Wie folgt verstanden:


    "dies ist dein home Verzeichnis der app. Kann nur mit Rootrechten außerhalb der app besichtigt werden"


    Hier bin ich jetzt davon ausgegangen, das ich ohne root oder App nicht mehr an die Bilder komme.
    Keine App, keine Bilder (Die SuperUser mal außen vor)



    "Diese Bilder kannst du dann nur in deiner app sehen.der Speicherplatz wird auch unnötig belastet."


    Wie ich das verstanden habe gibt es einen Speicher, der nur von deiner App aus gesehen werden kann (oder halt root).
    Da du meintest es würde unnötig Speicher belastet werden, bin ich davon ausgegangen, dass dieser App-Speicher begrenzt ist. Denn würde ich die Bilder außerhalb speichern, würden sie ja den gleichen Platz weg nehmen.
    Nur nicht im App-Speicher.


    Also noch mal meine Frage, diesmal etwas weniger verwirrend.


    Gibt es einen solchen App-Speicher und wenn ja, welche Begrenzungen gibt es da?

    Kann Spuren von persönlicher Meinung, Sarkasmus und Lakritz enthalten. Einzelne Wörter nicht für den Verzehr geeignet. Ungelesen mindestens haltbar bis: suche bei Google

  • Ja es giebt einen Speicherbereich der für die Instalierten Apps ist, der auch nur mit Root oder von der App selber sowie naturlich von system selber gesehen werden kann. Das ist deine Data Partion die unter /Data/Data im Dateipaht eingebunden wird.
    wie groß die ist kann ich nicht genau sagen . Ist Systemabhängig denke so 1-2 GB. In diesen Verzeichnis wird für jede sebst intalierte App ein verzeichnis angelegt. Name des Dir ist dein "PackageName" dort drin befinden sich wieder Unterverzeichnisse z.B. database, shaders, files, shared_prefs,... in denen die App Daten ablegt. Schaue mal mit einen Exploer z.B Fx nach das Inhaltzverzeichnis müstest du auch ohne root sehen.
    Zum Tehma Speicherplatz kalar nehmen die bilder den gleichen Platz ein aber du kanst mit ohne Root daraf zugreifen auch löschen wen der Platz knapp wird, das würde sonst nur in deiner App gehen. Müstest also eine art exploer integrieren.

  • Hallo zusammen, danke erstmal für die Antworten.


    Es ist so, dass dieses Bild ein Profilfoto ist, welches nur die eigene App benötigt. Es macht daher keinen Sinn, es in den öffentlichen Speicherbereich (SD-Karte) abzulegen. Wobei es hier auch Unterschiede gibt.


    1) getFilesDir()
    gibt den internen Speicherbereich der eigene App wieder. (Installationverzeichnis der App)


    2) getExternalFilesDir()
    gibt den Speicherbereich auf der SD-Card zurück, der nur für die eigene App zugänglich ist.


    3) getExternalStoragePublicDirectory()
    gibt den öffentlichen Speicherbereich auf der SD-Card zurück, auf dem alle Apps zugreifen können.



    Ich wollte den FileProvider dazu benutzen, um der Kamera App das Recht zu geben, in meinen internen Speicher zu schreiben. Leider klappt es nur mit den SD-Card Bereichen.


    Zum Thema Verschwendung von internen SSpeicherbereich ist zu sagen, dass das Profilfoto auf 0.5 Mb Komprimiert wird bevor es gespeichert wird. Wir wollen doch keine "Out of Memory exception" riskieren ;)


    Schönen Abend noch

  • Ok das du nur ein Bild in den App Speicher legen willst hast du leider nicht erwähnt. Gut Speicher Probleme sollte es so keine geben.
    Und wenn du es erst auf die sd Karte speicherst und dann in den App Speicher kopierst dann die Datei auf der sd Karte löschen. Ich habe auf jeden Fall schon Datein hin und her geschoben. Muss ich nachschauen wie ich das gemacht habe.

  • was mir in deinem Code auffällt ist. In der Zeile
    String dirpath = context.getFilesDir() "; gehst du von einen Unterverzeichnis in deinem appspeicher aus . Ist dies auch vorhanden?
    Teste es mal ohne + File.separator + "images"
    Wird die Datei Foto.jpg denn auch erzeugt oder geöffnet? Teste mit dem debuger ob file.createNewFile(); true zurück giebt.

  • so ich noch mal.


    1) getFilesDir()
    gibt den internen Speicherbereich der eigene App wieder. (Installationverzeichnis der App)


    also bei mir liefert context.getFilesDir() nicht den Path zm APP Speicherbereich.
    zurückgegeben wird /data/user/0/dein PackageName /files/image


    der richtige Path muss heisen /data/data/dein PackageName /files/image


    ich würde es so machen



    String dirpath = "/data/data/" + getPackageName() + "/files/image";


    Das mit dem Path zum App Speicherplatz hatte ich schon weiter oben erwänt.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!