1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Android NDK Screenshot mittels native C/C++ ???

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von tukaa, 19.08.2010.

  1. tukaa, 19.08.2010 #1
    tukaa

    tukaa Threadstarter Neuer Benutzer

    Beiträge:
    10
    Erhaltene Danke:
    1
    Registriert seit:
    07.07.2010
    Phone:
    HTC Desire
    Hallo zusammen,

    ich wollte ein screenshot app entwickeln. Leider gibt es keine möglichkeit mit Android SDK das zu realisieren. Aber in Vebindung NDK lässt sich möglicherweise das machen.

    Ich habe viel recherchiert und ein code gefunden, welche mit c gebunden ist. Leider kann ich es nicht am laufen bringen.

    Beschreibung Projekt map ScourceCode

    im grundegenommen manipuliert er die Scource code von ADB Framebuffer Service und lässt von dev/graphics/fb0 ein bild erstellen.

    Leider bekomme ich immer ein error "screenshot.raw file not found!".
    Ich denke, dass die bufferreader.c nicht aufgerufen lässt. Wenn ich die Activity ansehe, finde keine NDK codes, obwohl da ein jni-Ordner mit Android.mk und c-file gibt.

    Oder mach ich es ganz falsch bzw. anders??? Bitte hilf mir. Ich habe vor ein Monate mit Android-Programmierung angefangen und daher habe ich nicht viel Erfahrung.

    hat jemand vielleicht erfahrung in sowas? Bitte Bitte hilfe.
    Ich danke schonmal für eure Mühe.


    Tuka
     
  2. Kranki, 19.08.2010 #2
    Kranki

    Kranki Ehrenmitglied

    Beiträge:
    3,831
    Erhaltene Danke:
    814
    Registriert seit:
    19.07.2009
    Tablet:
    Samsung Galaxy Tab 3 7.0 Lite
    Code:
    ls -al /dev/graphics/fb0
    crw-rw----    1 root     graphics   29,   0 Aug 19 13:47 /dev/graphics/fb0
    Wird nicht klappen.
     
  3. tukaa, 19.08.2010 #3
    tukaa

    tukaa Threadstarter Neuer Benutzer

    Beiträge:
    10
    Erhaltene Danke:
    1
    Registriert seit:
    07.07.2010
    Phone:
    HTC Desire
    bitte erklär mir warum?
    ich habe keine Ahnung in linux also kann nicht viel von den Code verstehen.

    Ich verwende hier

    HTC desire mit root(2.1)
    Eclipse Galileo + Android SDK & NDK
    Windows 7 64 bit + Cygwin

    Gibt es andere möglichkeiten, ein screenshot zu erstellen??? Es gibt doch mehrere screenshot apps im market. Die haben doch irgend ein weg gefunden screenshot zu erstellen.

    MfG Tuka
     
  4. FelixL, 20.08.2010 #4
    FelixL

    FelixL Ehrenmitglied

    Beiträge:
    4,855
    Erhaltene Danke:
    754
    Registriert seit:
    26.11.2009
    Phone:
    Wileyfox Swift, HTC One M8
    Afaik brauchen alle Screenshot-Apps root, oder?
    Wenn nun dein Code oben root benutzen will muss er sich den erst holen.
    Ich glaube das meinte Kranki.
     
  5. the_alien, 20.08.2010 #5
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    Der Besitzer von /dev/graphics/fb0 ist root, der hat Lese- und Schreibrechte. Die Gruppe ist graphics, auch die haben Lese- und Schreibrechte. Alle andere nicht.
    Du bist alle anderen ;)
     
  6. tukaa, 21.08.2010 #6
    tukaa

    tukaa Threadstarter Neuer Benutzer

    Beiträge:
    10
    Erhaltene Danke:
    1
    Registriert seit:
    07.07.2010
    Phone:
    HTC Desire
    Also soweit ich es verstanden habe macht er es so.

    Zuerste erstellet er ein screenshot.bmp in bufferreader.c

    Code:
    int screenshotHandle = open("/data/data/com.koushikdutta.screenshot/screenshot.bmp", O_WRONLY | O_CREAT);
    danach die fb0 auslesen

    Code:
    framebufferHandle = open("/dev/graphics/fb0", O_RDONLY);
    danach schreiben und ...

    in Activity macht er es so:

    Code:
    Process sh = Runtime.getRuntime().exec("su -c sh"); // Super User????? oder doch nicht???
    
    OutputStream os = sh.getOutputStream();
    
    inal String file = "/data/data/com.koushikdutta.screenshot/screenshot.bmp";
    
    int screenshotUid = getUidForPackage("com.koushikdutta.screenshot");
    String screenshotUser = getUserForPackage("com.koushikdutta.screenshot");
    writeCommand(os, "rm " + file);
    writeCommand(os, "mkdir /sdcard/dcim");
    writeCommand(os, "mkdir /sdcard/dcim/Screenshot");
    writeCommand(os, "/data/data/com.koushikdutta.screenshot/screenshot");
    writeCommand(os, "chown root." + screenshotUser + " " + file);
    writeCommand(os, "chmod 660 " + file);
    writeCommand(os, "exit");
    os.flush();
    aber ich frag mich, wo er die native code aufruft. Deswegen wird es kein screenshot.bmp erstellt und ich kriege error "file not found" (meiner meinung nach :( )

    Wisst ihr ob es noch andere möglichkeiten für screenshot gibt.
     
  7. the_alien, 21.08.2010 #7
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    Hast du denn Rootrechte und "su"? Sonst kannst du fb0 nicht auslesen.
     
  8. tukaa, 21.08.2010 #8
    tukaa

    tukaa Threadstarter Neuer Benutzer

    Beiträge:
    10
    Erhaltene Danke:
    1
    Registriert seit:
    07.07.2010
    Phone:
    HTC Desire
    habe ich !!! wenn ich es starte fragt es nach SuperUser und ich bestätige. lasse ein screenshot machen aber kriege fehler "screenshot.raw not found". Wie gesagt ich denke, dass die bufferreader.c läuft nicht. Habe selbst versucht mit NDK was zu basteln, leider habe ich es noch am laufen gebracht. Leider bin ich ein anfänger, was android betrift. Vor allem NDK habe ich null Ahnung. Denkt ihr, dass es funktioniern, wenn ich es richtig anstelle?

    Und nochmals eine Alternative wäre willkomen.

    Grüße Tuka
     

Diese Seite empfehlen