ja zamierzam zrobić zdjęcie, które jest z aplikacji na Android, ale jest jakiś problem ze strumieniem Output i występuje błąd z uszkodzenia rurociągów z java.io . Mój kod, jeśli poniżej. Oto problem z funkcją polecenia zapisu. Pobrałem to demo z git hub, więc proszę pomóżcie mi jak najszybciej. Z góry dziękuję.błąd rura złamany podczas przechwytywania obrazu w android
void takeScreenshot()
{
String file ="/data/data/com.koushikdutta.screenshot/screenshot.bmp";;
OutputStream os = null;
int screenshotUid;
String screenshotUser = null;
Process sh = null;
try
{
try
{
sh = Runtime.getRuntime().exec("su -c sh");
os = sh.getOutputStream();
Log.e("","THE VALUE OF OBJECT IS:::::"+os.toString());
// file ="/data/data/com.koushikdutta.screenshot/screenshot.bmp";
screenshotUid = getUidForPackage("com.koushikdutta.screenshot");
screenshotUser = getUserForPackage("com.koushikdutta.screenshot");
}
catch(Exception e)
{
Log.e("","Hi Error created");
}
try
{
Thread.sleep(2000);
writeCommand(os, "rm "+file);
writeCommand(os, "mkdir /sdcard/dcim");
}
catch(Exception e)
{
Log.e("","Hello How are you??"+e.getMessage());
}
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();
os.close();
boolean success = false;
for (int i = 0; i < 10; i++)
{
try
{
Thread.sleep(1000);
// if we can successfully get the exit value,
// then that means the process exited.
sh.exitValue();
success = true;
break;
}
catch (Exception ex)
{
Log.e("","Error while"+ex.getMessage());
}
}
try
{
if (!success)
throw new Exception("Unable to take screenshot");
File screenshot = new File(file);
if (!screenshot.exists())
throw new Exception("screenshot.raw file not found!");
mHander.post(new Runnable()
{
public void run()
{
Toast toast = Toast.makeText(
ScreenshotActivity.this,
"Screen captured!", Toast.LENGTH_LONG);
toast.show();
}
});
}
catch(Exception e)
{
Log.e("","ERROR CREATING......."+e.getMessage());
}
try
{
FileInputStream fs = new FileInputStream(file);
mBitmap = BitmapFactory.decodeStream(fs);
mScreenshotFile = String.format(
"/sdcard/dcim/Screenshot/screenshot%d.png",
System.currentTimeMillis());
FileOutputStream fout = new FileOutputStream(mScreenshotFile);
mBitmap.compress(CompressFormat.PNG, 100, fout);
fout.close();
mConnection.scanFile(mScreenshotFile, null);
}
catch (Exception ex)
{
Log.e("","Error while"+ex.getMessage());
}
mHander.post(new Runnable()
{
public void run()
{
mImage.setImageBitmap(mBitmap);
}
});
}
catch (Exception ex)
{
Toast toast = Toast.makeText(
ScreenshotActivity.this, "Error: " + ex.getMessage(),
Toast.LENGTH_LONG);
toast.show();
Log.e("",""+ "Error: " + ex.getMessage());
}
}
static void writeCommand(final OutputStream os, String command)
{
try
{
os.write((command+"\n").getBytes("ASCII"));
}
catch(Exception e)
{
e.printStackTrace();
Log.e("","Error was::::::::::::::::::"+e.getMessage());
}
}
java.io.IOException: Błąd przy uruchomieniu exec(). Polecenie: [/ bin/bash] Katalog roboczy: null Środowisko: [ANDROID_SOCKET_zygote = 10, ANDROID_BOOTLOGO = 1, EXTERNAL_STORAGE =/mnt/sdcard, ANDROID_ASSETS =/system/app, ASEC_MOUNTPOINT =/mnt/asec, PATH =/sbin:/system/sbin:/system/bin:/system/xbin, ANDROID_DATA =/data, BOOTCLASSPATH =/system/framework/core.jar: /system/framework/ext.jar: /system/framework/framework.jar:/system /framework/android.policy.jar:/system/framework/services.jar, ANDROID_PROPERTY_WORKSPACE = 9 32768, ANDROID_ROOT =/system, LD_LIBRARY_PATH =/system/lib] –
Użyłem twojego kodu, ale utworzyłem górny logcat –