Screen Capture in android

前端 未结 4 527
时光说笑
时光说笑 2020-11-27 19:35

I want to develop an application that will take screenshot of android screen..does any one know how to do it..? which is similar to koushik duttas screen shot..But with out

相关标签:
4条回答
  • 2020-11-27 19:41

    You can try something like this

    private RelativeLayout view;
    
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
        view = (RelativeLayout)findViewById(R.id.relativeView);
    
        View v1 = view.getRootView();
    
        v1.setDrawingCacheEnabled(true);
        Bitmap bm = v1.getDrawingCache();
    }
    
    0 讨论(0)
  • 2020-11-27 19:43

    I think it is impossible without root or the SDK, sorry.

    I would love to be proven wrong.

    Not an app, but if you have a USB cable, you can install the Android SDK on a PC and take screenshots from the PC with androidscreencast, without having to root your phone.

    0 讨论(0)
  • 2020-11-27 19:47

    The method view.getDrawingCache() will first attempt to retrieve an image it has previously cached. This can cause issues if you want to guarantee your screenshot is up-to-date. For instance, if your user clicks your screenshot button, then changes the UI, then clicks it again, the second screenshot will be identical to the first unless you wipe the cache. I find the following method more convenient:

    public Bitmap takeScreenshot() {
      View rootView = findViewById(android.R.id.content).getRootView();
      Bitmap bitmap = Bitmap.createBitmap(rootView.getWidth(), rootView.getHeight(), Bitmap.Config.ARGB_8888);
      Canvas canvas = new Canvas(bitmap);
      rootView.draw(canvas);
      return bitmap;
    }
    
    0 讨论(0)
  • 2020-11-27 20:04

    Let's say that you clicked on a button:

    findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
       @Override
       public void onClick(View v) {
           Bitmap bitmap = takeScreenshot();
           saveBitmap(bitmap);
       }
    });
    

    After that you need these two methods:

    public Bitmap takeScreenshot() {
       View rootView = findViewById(android.R.id.content).getRootView();
       rootView.setDrawingCacheEnabled(true);
       return rootView.getDrawingCache();
    }
    
     public void saveBitmap(Bitmap bitmap) {
        File imagePath = new File(Environment.getExternalStorageDirectory() + "/screenshot.png");
        FileOutputStream fos;
        try {
            fos = new FileOutputStream(imagePath);
            bitmap.compress(CompressFormat.PNG, 100, fos);
            fos.flush();
            fos.close();
        } catch (FileNotFoundException e) {
            Log.e("GREC", e.getMessage(), e);
        } catch (IOException e) {
            Log.e("GREC", e.getMessage(), e);
        }
    }
    
    0 讨论(0)
提交回复
热议问题