2013-09-11 5 views
0

Я хочу сделать приложение, которое может захватить экран устройства без корня, как: https://play.google.com/store/apps/details?id=com.icecoldapps.screenshotultimateКак сделать приложение экрана захвата на Android

Но я не могу найти решение. Кто-нибудь мне помогает?

спасибо.

+0

На какой телефон вы хотите сделать снимки экрана? –

+0

@ Yume117: Любое устройство, я хочу, чтобы приложение запускалось на моем устройстве. – Tommy

ответ

0

Из FAQ по приложения:

No “Capture Method” available for my device!

This is normal if your device isn't rooted. It's the way how the Android security model works; it just doesn't allow taking a screenshot on some devices. However, you can enable screenshot functionality on your device by enabling it through a computer. To see how you can do this go to “Screenshot Ultimate” > “Settings” > “Capture methods” > “No capture method help”. You can email the manual to yourself so you can complete it on your computer (Windows, Linux or Mac OSX).

1

Programatically вы можете сделать это, выполнив следующую команду с помощью ADB:

adb shell /system/bin/screencap -p /sdcard/img.png 

Однако, чтобы сделать то же самое из приложения вы можете использовать ниже метода:

Process sh = Runtime.getRuntime().exec("su", null,null); //getting superuser permission to access /system/bin 
OutputStream os = sh.getOutputStream(); 
os.write(("/system/bin/screencap -p " + "/sdcard/img.png").getBytes("ASCII")); //executing the command 
os.flush(); 
os.close(); 
sh.waitFor(); 

В /sdcard/ вы будете иметь img.png, который будет вашим снимком экрана.

+0

Спасибо Закс. Но когда я строю и запускаю, получаю ошибку: java.io.IOException: Ошибка при выполнении exec(). Команда: [su] Рабочий каталог: null Окружающая среда: null – Tommy

+0

@Tommy: Вы не должны получать никаких исключений, если у вас есть привилегии суперпользователя. Я думаю, что вы пытаетесь использовать нерукотворное устройство. Так что попробуйте то же самое на эмуляторе. – Zax

+0

Да, я бегу на неруковом устройстве. Это приложение может сделать это: https://play.google.com/store/apps/details?id=com.icecoldapps.screenshotultimate – Tommy

0

Проверьте, не поможет ли это вам. Следующий код поможет вам захватить экран конкретного макета

RelativeLayout screenShotLayout=(RelativeLayout)findViewById(R.id.ScreenShotLayout); 

Bitmap Bitmapimage=Bitmap.createBitmap(screenShotLayout.getWidth(),screenShotLayout.getHeight(), Config.ARGB_8888); 
screenShotLayout.setDrawingCacheEnabled(true); 
screenShotLayout.buildDrawingCache(); 
Bitmapimage=screenShotLayout.getDrawingCache(); 
//Bitmapimage is the screenshot of the layout. Do your stuff with it 
+0

Спасибо Bhavna, но он только фиксирует текущий экран приложения – Tommy

0
// image naming and path to include sd card appending name you choose for file 
String mPath = Environment.getExternalStorageDirectory().toString() + "/" + ACCUWX.IMAGE_APPEND; 

// create bitmap screen capture 
Bitmap bitmap; 
View v1 = mCurrentUrlMask.getRootView(); 
v1.setDrawingCacheEnabled(true); 
bitmap = Bitmap.createBitmap(v1.getDrawingCache()); 
v1.setDrawingCacheEnabled(false); 

OutputStream fout = null; 
imageFile = new File(mPath); 

try { 
    fout = new FileOutputStream(imageFile); 
    bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fout); 
    fout.flush(); 
    fout.close(); 

} catch (FileNotFoundException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

Чтобы получить доступ к файлам:

Uri uri = Uri.fromFile(new File(mPath)); 
+0

Уважаемый. Мне нужен экран устройства захвата, а не захват из приложения – Tommy

Смежные вопросы