public class MainActivity extends Activity {
/** Called when the activity is first created. */
private static final String TAG ="llsskk";
private Button btnShort;
ImageView image = null;
public static String SCREEN_SHOTS_LOCATION = Environment.getExternalStorageDirectory().getPath();
private Context mContext=this;
private int mLCDWidth;
private int mLCDHeight;
private static final int PIXEL_BYTES = 4;
private Bitmap mBitmap=null;
private DataOutputStream dos=null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
WindowManager mWm = ((WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE));
Point DisplaySize = new Point();
mWm.getDefaultDisplay().getSize(DisplaySize);
mLCDWidth = DisplaySize.x;
mLCDWidth += 8; // fusion3(SGH-I337), maybe plus 8 pixel.
mLCDHeight = DisplaySize.y;
image = (ImageView)findViewById(R.id.image);
btnShort = (Button) findViewById(R.id.btnShots);
btnShort.setOnClickListener(new Button.OnClickListener() {
private Bitmap bitmao;
public void onClick(View v) {
try {
Log.v(TAG, "click!!");
bitmao = takeScreenShotBySec();
image.setImageBitmap(bitmao);
} catch (Exception e) {
// TODO Auto-generated catch block
Log.e("tag",TAG);
}
}
});
}
public boolean root() {
try {
// 执行su变更用户身份为root
Process process = Runtime.getRuntime().exec("su");
dos = new DataOutputStream(process.getOutputStream());
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
protected Bitmap takeScreenShotBySec() {
// TODO Auto-generated method stub
byte[] bytestream = new byte[mLCDWidth * mLCDHeight * PIXEL_BYTES];
InputStream mFIS = null;
if(root()){
try {
dos.writeBytes("chmod 777 /dev/graphics/fb0
");
dos.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
mFIS = new FileInputStream(new File("/dev/graphics/fb0"));
mFIS.read(bytestream);
if (mBitmap != null)
mBitmap.recycle();
Log.v(TAG, "take!!");
mBitmap = Bitmap.createBitmap(mLCDWidth, mLCDHeight, Config.ARGB_8888);
Log.v(TAG, mBitmap.toString());
for (int i = 0; i < bytestream.length; i = i + PIXEL_BYTES) {
byte tem = bytestream[i];
bytestream[i] = bytestream[i + 2];
bytestream[i + 2] = tem;
}
Buffer buffer = ByteBuffer.wrap(bytestream);
mBitmap.copyPixelsFromBuffer(buffer);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.v(TAG, e.toString());
} finally{
if(mFIS!=null){
try {
mFIS.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return mBitmap;
}
}