zoukankan      html  css  js  c++  java
  • Android 7.1.1 系统截屏

    frameworks/base/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java

    TakeScreenshotService.java

    package com.android.systemui.screenshot;
    
    import android.app.Service;
    import android.content.Intent;
    import android.os.Handler;
    import android.os.IBinder;
    import android.os.Message;
    import android.os.Messenger;
    import android.os.RemoteException;
    import android.os.UserManager;
    import android.util.Log;
    import android.view.WindowManager;
    
    public class TakeScreenshotService extends Service {
        private static final String TAG = "TakeScreenshotService";
    
        private static GlobalScreenshot mScreenshot;
    
        private Handler mHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                final Messenger callback = msg.replyTo;
                Runnable finisher = new Runnable() {
                    @Override
                    public void run() {
                        Message reply = Message.obtain(null, 1);
                        try {
                            callback.send(reply);
                        } catch (RemoteException e) {
                        }
                    }
                };
    
                // If the storage for this user is locked, we have no place to store
                // the screenshot, so skip taking it instead of showing a misleading
                // animation and error notification.
                if (!getSystemService(UserManager.class).isUserUnlocked()) {
                    Log.w(TAG, "Skipping screenshot because storage is locked!");
                    post(finisher);
                    return;
                }
    
                if (mScreenshot == null) {
                    mScreenshot = new GlobalScreenshot(TakeScreenshotService.this);
                }
    
                switch (msg.what) {
                    case WindowManager.TAKE_SCREENSHOT_FULLSCREEN:
                        mScreenshot.takeScreenshot(finisher, msg.arg1 > 0, msg.arg2 > 0);
                        break;
                    case WindowManager.TAKE_SCREENSHOT_SELECTED_REGION:
                        mScreenshot.takeScreenshotPartial(finisher, msg.arg1 > 0, msg.arg2 > 0);
                        break;
                }
            }
        };
    
        @Override
        public IBinder onBind(Intent intent) {
            return new Messenger(mHandler).getBinder();
        }
    
        @Override
        public boolean onUnbind(Intent intent) {
            if (mScreenshot != null) mScreenshot.stopScreenshot();
            return true;
        }
    }

     主要是创建一个 GlobalScreenshot 对象,通过GlobalScreenshot对象实现截屏,之所以将该类宿主在service里面是因为截屏可能产生耗时,这应该是设计时的理念。

    当然完全可以由自己创建GlobalScreenshot对象,在线程里面实现截屏.

  • 相关阅读:
    C++类型转换(字符串)
    GDI+ 中Image::FromStream ,用流的方式显示图像
    mfc对话框序列化实例
    配置android开发环境eclipse获取ADT获取不到(转)
    vs开发错误总结
    MFC获取文件操作
    Android系统架构剖析(转)
    OpenCV 图像采样 插值 几何变换
    C++ char*,char[],string,CString转换
    Simscape Multibody 教程 —— 入门学习
  • 原文地址:https://www.cnblogs.com/onelikeone/p/7554088.html
Copyright © 2011-2022 走看看