Android: l'écriture a échoué: EPIPE (Broken pipe) Erreur lors de l'écriture du fichier
J'essayais de prendre une capture d'écran de l'écran Android par programmation. J'avais fait le code suivant:
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)
Svp quelqu'un peut-il aider? J'avais déjà vérifié les autres posts et je ne trouve rien la résolution de mon problème.
EDIT:
Veuillez noter que l'Erreur se produit dans la ligne os.write()
.
Avez-vous avez les droits root sur votre appareil?
J'étais juste en cours d'exécution sur l'Émulateur. Et dans un des post, j'ai trouvé, je n'ai pas à avoir de la racine de l'autorisation. Peut-être que c'est faux. S'il vous plaît pouvez-vous m'aider comment obtenir à la racine de l'autorisation sur l'émulateur?
Vous essayez d'utiliser un système de commande de /system/bin. Je suppose que vous auriez besoin de permissions root à valoir sur l'émulateur. Mais vous pouvez essayer cette méthode de prendre une capture d'écran: stackoverflow.com/questions/2661536/...
J'étais juste en cours d'exécution sur l'Émulateur. Et dans un des post, j'ai trouvé, je n'ai pas à avoir de la racine de l'autorisation. Peut-être que c'est faux. S'il vous plaît pouvez-vous m'aider comment obtenir à la racine de l'autorisation sur l'émulateur?
Vous essayez d'utiliser un système de commande de /system/bin. Je suppose que vous auriez besoin de permissions root à valoir sur l'émulateur. Mais vous pouvez essayer cette méthode de prendre une capture d'écran: stackoverflow.com/questions/2661536/...
OriginalL'auteur Hariprasauth Ramamoorthy | 2013-07-12
Vous devez vous connecter pour publier un commentaire.
EPIPE problème se produit généralement lorsque vous essayez d'exécuter la commande qui a besoin de permissions root (
getRuntime().exec
) dans votre cas, sur l'appareil sans il ou exécuter plusieurs racine commandes simultanément. Si vous travaillez sur l'émulateur et le besoin de la racine je pense que vous, vous pouvez essayer ce alors que l'émulateur est en cours d'exécution:Ici http://abd-tech.blogspot.com/2011/05/test-root-apps-on-android-emulator.html plus en détail explication.
Voir mes modifications.J'ai proposé de manière plus claire
Je vous remercie encore une fois. Je suis juste essayer d'exécuter ces commandes à partir de l'invite de commande et il semble juste pour accrocher. Avez-vous essayé? Faut-il à un lotoftime pour exécuter une ligne?
C'est plutôt étrange. Bien sûr, je l'ai essayé et pas une seule fois. Tout fonctionnait bien. Essayez de redémarrer la bad.
maintenant, il fonctionne.. j'ai maintenant installer superuser - su.. j'ai suivi le même lien?
OriginalL'auteur Oleksandr Karaberov
Le problème est que votre application n'avez pas les permissions pour accéder à la surface de flinger (qui utilise la mémoire tampon d'écran et hw décodeur pour rendre votre fichier vidéo).
Afin d'avoir ces autorisations de construire (et signer) de votre application comme une application système et la placer à la system/priv-app dossier.
En outre, vous devez ajouter l'autorisation suivante à ce système d'application:
note le
coreApp="true"
pièces.android:sharedUserId="android.uid.media"
et vous devrez ajouter
<uses-permission android:name="android.permission.ACCESS_SURFACE_FLINGER" />
autorisation.veuillez caisse ainsi: Autorisation de la négation: ne Peut pas accéder à la SurfaceFlinger
OriginalL'auteur benchuk