wake-up-neo.net

Android: Schreiben fehlgeschlagen: EPIPE (Broken Pipe) Fehler beim Schreiben der Datei

Ich habe versucht, programmgesteuert einen Screenshot des Android-Bildschirms zu machen. Ich hatte den folgenden Code gemacht:

private void getsnap(){
    try{
        Process sh = Runtime.getRuntime().exec("su", null, null);
        OutputStream os = sh.getOutputStream();
        String filePath = this.getFilesDir().getPath().toString() + "/fileName1.jpeg";
        os.write(("/system/bin/screencap -p " + filePath).getBytes("ASCII"));
        os.flush();
        os.close();
        sh.waitFor();       
    } 
    catch (Exception e) 
    {
        e.printStackTrace();
    }
}

Java.io.IOException: write failed: EPIPE (Broken pipe)

Kann bitte jemand helfen? Ich hatte bereits die anderen Beiträge überprüft und finde keine Lösung für mein Problem.


BEARBEITEN:

Bitte beachten Sie, dass der Fehler in der Zeile os.write() auftritt.

Das EPIPE-Problem tritt normalerweise auf, wenn Sie versuchen, einen Befehl auszuführen, der in Ihrem Fall root-Berechtigungen (getRuntime().exec) auf dem Gerät ohne diesen Befehl benötigt, oder mehrere Root-Befehle gleichzeitig auszuführen. Wenn Sie an dem Emulator arbeiten und ihn rooten müssen, denke ich, können Sie dies versuchen, während der Emulator läuft:

adb Shell mount -o rw,remount -t yaffs2 /dev/block/mtdblock03 /system  
adb Push su /system/xbin/su  
adb Shell chmod 06755 /system  
adb Shell chmod 06755 /system/xbin/su

Hier http://abd-tech.blogspot.com/2011/05/test-root-apps-on-Android-emulator.html nähere Erklärung.

10

Das Problem ist, dass Ihre App über keine Systemberechtigungen für den Zugriff auf den Oberflächenflinger verfügt (der Bildschirmpuffer und den HD-Decoder zum Rendern Ihrer Videodatei verwendet). Um diese Berechtigungen zu erhalten, müssen Sie Ihre App erstellen (und signieren) als System-App und suchen Sie sie im Ordner system/priv-app ..__ Zusätzlich müssen Sie dieser System-App die folgenden Berechtigungen hinzufügen:

<manifest package="com.yourapp.demo"
    Android:versionCode="1"
   coreApp="true"
    Android:sharedUserId="Android.uid.media"
    Android:versionName="1.0" xmlns:Android="http://schemas.Android.com/apk/res/Android">

beachten Sie die coreApp="true" Android:sharedUserId="Android.uid.media"-Teile.

und Sie müssen die <uses-permission Android:name="Android.permission.ACCESS_SURFACE_FLINGER" />-Berechtigung hinzufügen.

bitte überprüfen Sie auch dies: Berechtigungsverweigerung: Zugriff auf den SurfaceFlinger nicht möglich

0
benchuk