Dateirechte

  • Antworten:5
Reno Krohmann
  • Forum-Beiträge: 8

13.04.2011, 16:38:25 via Website

Hallo alle zusammen,

ich habe da ein Problem mit den Dateirechten. Ich habe eine App geschrieben die ihre Arbeit so weit auch ganz annehmbar verrichtet. Über einen Button wird eine weitere völlig externe, unabhängige App gestartet. Dabei handelt es sich um eine offline Navigation. Ist ja relativ einfach gemacht über:

1i.setClassName( "package", "package.Activity");
2 startActivity(i);

Ok so weit so gut. Nun bin ich mit meiner App in der Lage der Navi App gewissen Befehle zu übermitteln. (Fahre nach dort oder setze diesen POI usw.) Dazu hat die NaviApp einen Ordner frei gegeben in dem sie einfache Textdateien in einem speziellen Format erwartet. Erstellen und speichern der Dateien ist kein Problem. Die Dateien werden mit dem geforderten Inhalt am richtigen Ort angelegt. Nur leider kann die Navi App meine Dateien nicht lesen weil sie nicht über die richtigen Rechte verfügt. Lege ich die Dateien auf folgendem Weg an

1String lineSep = System.getProperty("line.separator");
2File fi = new File(dir + "/Drive/sdk/cmd.5.in");
3 * // fi.setReadable(true, false); // fi.setWritable(true,
4 * false);
5 f = new PrintStream(dir + "/Drive/sdk/cmd.5.in");
6
7 f.println(); f.append("[Head]" + lineSep); f.append("Type=5"
8 + lineSep);
9
10 f.flush(); f.close();

Wird die Datei mit dem richtigen Inhalt an die richtige Stelle gelegt. Nehme ich aber die Kommentare vor den read/write Berechtigungen raus fliegt mir sofort meine App um die Ohren. Ich habe diesbezüglich auch andere Wege probiert wie z.B.

1FileOutputStream f = c.openFileOutput(dir + "/Drive/sdk/cmd.5.in", Context.MODE_WORLD_READABLE);
2
3 PrintWriter pw = new PrintWriter(f);
4 pw.println("Howdy do to you.");
5 pw.println("Here is a second line.");
6 pw.flush();
7 pw.close();
8 f.close();

Auch hier fliegt mir meine App um die Ohren weil ich explizite Rechte vergeben will. Der Ordner liegt direkt unterm root welches ich mir über android.os.Environment.getExternalStorageDirectory(); hole. Die Ordnerstruktur ist nicht durch mich oder meine App angelegt sonder durch die NaviApp. Hat jemand eine Idee wie ich die Rechte so vergeben kann, dass die NaviApp auf die von mir geschriebenen Dateien zugreifen kann. Die müssen sowohl lesen/schreiben können aber das Ding auch löschen können nachdem die entsprechenden Aktionen ausgeführt sind.

Vielen Dank schon mal im Voraus
Reno

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

13.04.2011, 23:38:47 via Website

Immer gern genommen: android.permission.WRITE_EXTERNAL_STORAGE vergessen?

Antworten
Reno Krohmann
  • Forum-Beiträge: 8

14.04.2011, 08:56:05 via Website

Hi and dev,

ich wünschte es wär so. Den Fehler hab ich schon vor Tagen eliminiert, wegen einer solchen Schusselligkeit hätte ich euch auch nicht Bemüht :grin:. Ohne die permissions könnte ich gar keine Dateien schreiben. Das funktioniert aber hervorragend. Nur die andere App kann anscheinend nicht auf Dateien mit meiner ID zugreifen. Was grundsätzlich ja auch so von Android oder in diesem Fall wohl eher Linux gewollt ist. Nur von mir ist das so nicht gewollt .

Also danke für den Denkanstoß aber das hat mein Problem noch nicht gelöst.

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

14.04.2011, 13:12:03 via Website

Hm, dann stimmt aber etwas anderes nicht...
Dateien auf der SD-Karte ("Environment.getExternalStorageDirectory()") sind grundsätzlich für jeden les- und beschreibbar.

Diese Struktur "/Drive/sdk/" siehst du am PC, wenn du das Handy als Speicherkarte mountest?
Oder reden wir eigentlich doch von internem Speicher, etwa im Installationsverzeichnis der Navi-App?

Am Rande: wenn du Einfluss auf die Art der Schnittstelle hast, dann solltest du Bundle(s) statt Dateien zum Austausch von Daten zwischen den Apps verwenden.

Antworten
Reno Krohmann
  • Forum-Beiträge: 8

14.04.2011, 13:33:35 via Website

Na das sind doch schon mal interessante Infos. Dann kann es also an den Rechten auch nicht liegen. War einfach nur eine Idee der ich nachgegangen bin. Ich kann die Dateien sehen wenn ich das Gerät per USB verbinde und auch der Inhalt ist so wie ich mir das vorstelle. Dann muss ich mich wohl nochmal mit dem Hersteller der NaviApp auseinander setzen. Leider ist mein Ansprechpartner dort für ein paar Tage nicht zu erreichen und deshalb dachte ich, ich versuche es mal hier.

Das Ganze soll sowieso über eine SDK gelöst werden in der wir gegenseitig auf die Apps zugreifen können. Nur sind wir derzeit etwas im Zeitdruck und deshalb gibt es vorerst die Lösung mit den Externen Dateien.

Vielen Dank aber für die Infos, weiß ich doch jetzt relativ sicher, dass der Fehler nicht unbedingt bei mir zu suchen ist.

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

14.04.2011, 19:01:51 via Website

Nur sind wir derzeit etwas im Zeitdruck und deshalb gibt es vorerst die Lösung mit den Externen Dateien.

Wobei sich jetzt offenbar herausstellt, das es mit den Dateien länger dauert als es bei Verwendung von Bundles der Fall gewesen wäre :P


Vielen Dank aber für die Infos

Gerne.

Antworten