我想制作一个可以以编程方式截取android设备整个屏幕的应用程序。
我已经进行了一些研发,但它表明只有在 root 设备或 API 级别 4.0 允许访问的更高设备上截屏才能实现此目的。
已经有一些付费应用程序允许在无根设备上截屏。
因此,如果有人建议我如何在未植根的设备上执行此操作,那就太好了。
提前致谢。
我想制作一个可以以编程方式截取android设备整个屏幕的应用程序。
我已经进行了一些研发,但它表明只有在 root 设备或 API 级别 4.0 允许访问的更高设备上截屏才能实现此目的。
已经有一些付费应用程序允许在无根设备上截屏。
因此,如果有人建议我如何在未植根的设备上执行此操作,那就太好了。
提前致谢。
我最近做了一些类似的事情,用于与社交媒体分享。这是允许我的屏幕截图存储在 sd 卡上并稍后用于您需要的任何代码的代码:
// image naming and path to include sd card appending name you choose for file
String mPath = Environment.getExternalStorageDirectory().toString() + "/" + Image;
// 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));
使用 SDK,您只能截取根视图(及其所有子视图)的屏幕截图,这意味着:仅您的视图。不会使用对话框、toast、键盘、微调器和状态栏,因为它们不共享同一个视图树。
Play 商店中有一些应用程序,但它们肯定不是跨平台的。使用有根设备,您可以使用 ASL(Android 屏幕截图库)通过 /dev/graphics/fb0 帧缓冲区抓取屏幕截图。这会很好地工作,并且会产生类似于 ddms 的抓取。视频硬件覆盖将保持黑色。
我没有对您提到的那些应用程序进行逆向工程,但我相信它们会识别您正在使用的设备,然后发送将截取屏幕截图的密钥(例如音量 + 降低),然后观察 sdcard 上的新文件。您可以看到他们需要时间来截取屏幕截图。
TestFairy ( http://www.testfairy.com ) 抓取应用程序的整个屏幕,包括 opengl 表面视图、toast 和对话框。它通过检测来完成此操作,并且它会自动执行此操作。
我希望这有帮助 :)
尝试这个
public void shareit()
{
View view = findViewById(R.id.layout);//ur layout id
view.getRootView();
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state))
{
picDir = new File(Environment.getExternalStorageDirectory()+ "/myPic");
if (!picDir.exists())
{
picDir.mkdir();
}
view.setDrawingCacheEnabled(true);
view.buildDrawingCache(true);
Bitmap bitmap = view.getDrawingCache();
// Date date = new Date();
String fileName = "mylove" + ".jpg";
picFile = new File(picDir + "/" + fileName);
try
{
picFile.createNewFile();
FileOutputStream picOut = new FileOutputStream(picFile);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), (int)(bitmap.getHeight()/1.2));
boolean saved = bitmap.compress(CompressFormat.JPEG, 100, picOut);
if (saved)
{
Toast.makeText(getApplicationContext(), "Image saved to your device Pictures "+ "directory!", Toast.LENGTH_SHORT).show();
} else
{
//Error
}
picOut.close();
}
catch (Exception e)
{
e.printStackTrace();
}
view.destroyDrawingCache();
} else {
//Error
}
}