博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 7.1.1 系统截屏
阅读量:6311 次
发布时间:2019-06-22

本文共 2529 字,大约阅读时间需要 8 分钟。

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对象,在线程里面实现截屏.

 

转载于:https://www.cnblogs.com/onelikeone/p/7554088.html

你可能感兴趣的文章
IOS中图片(UIImage)拉伸技巧
查看>>
【工具】系统性能查看工具 dstat
查看>>
基于zepto或jquery的手机端弹出框成功,失败,加载特效
查看>>
php引用(&)
查看>>
Delphi 操作Flash D7~XE10都有 导入Activex控件 shockwave
查看>>
oracle 学习笔记之名词解释
查看>>
MySQL Cluster搭建与测试
查看>>
python数据分析画图体验
查看>>
军规15 确保集成和调用第三方APP
查看>>
Etcd和ZooKeeper,究竟谁在watch的功能表现更好?
查看>>
Shredding Company 碎纸机,dfs()枚举每一种情况,再加剪枝。
查看>>
命名空间和模块化编程 - C++快速入门39
查看>>
结构化程序设计03 - 零基础入门学习Delphi12
查看>>
今天才知道怎么插入代码!!!!!!!!!
查看>>
D2007在64位Win7出现 delphi 2007 assertion failure thread32.cpp 的解决办法
查看>>
STM32的TAMPER-RTC管脚作为Tamper的使用[转]
查看>>
[记]一个逐步“优化”的范例程序
查看>>
2012-01-09_2
查看>>
数学 - 线性代数导论 - #5 矩阵变换之置换与转置
查看>>
java数据结构:队列
查看>>