日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

Android 截屏监听(截图分享功能实现)

發(fā)布時(shí)間:2025/3/8 Android 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 截屏监听(截图分享功能实现) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

具體來(lái)說(shuō)就是,檢測(cè)到了用戶在應(yīng)用內(nèi)有截圖,彈出一個(gè)分享界面, 在截圖下方添加一個(gè)二維碼,進(jìn)行分享。


●●●?

前言

Android系統(tǒng)沒有直接對(duì)截屏事件監(jiān)聽的接口,也沒有廣播,只能自己動(dòng)手來(lái)豐衣足食,一般有三種方法。

·???????利用FileObserver監(jiān)聽某個(gè)目錄中資源變化情況

·???????利用ContentObserver監(jiān)聽全部資源的變化

·???????監(jiān)聽截屏快捷按鍵 ( 由于廠商自定義Android系統(tǒng)的多樣性,再加上快捷鍵的不同以及第三方應(yīng)用,監(jiān)聽截屏快捷鍵這事基本不靠譜,可以直接忽略 )

?

●●●?

Android截屏系統(tǒng)做的事情

通過(guò)讀源碼(TakeScreenshotService和 GlobalScreenshot )總結(jié)Android截屏系統(tǒng)做的事情:

  • 保存截屏Bitmap到本地文件

  • 把圖片記錄插入到ContentProvider中

  • 發(fā)送一個(gè)截圖相關(guān)的Notification

  • ?

    解決方法:

    ·???????利用FileObserver監(jiān)聽某個(gè)目錄中資源變化情況

    ·???????利用ContentObserver監(jiān)聽全部資源的變化

    ?

    ●●●?

    FileObserver 與ContentObserver 比較

    對(duì)于截圖監(jiān)聽有兩種常用方案

    方案一: 通過(guò)FileObserver監(jiān)聽截屏文件夾,當(dāng)有新的截屏文件產(chǎn)生時(shí),調(diào)用設(shè)定的回調(diào)函數(shù)執(zhí)行相關(guān)操作。

    優(yōu)點(diǎn):

    1. 實(shí)現(xiàn)簡(jiǎn)單

    缺點(diǎn):

    1. 不同手機(jī)默認(rèn)的截屏路徑可能不同,需要做適配處理

    2. 不同手機(jī)截屏觸發(fā)的事件名稱可能不同,需要測(cè)試適配

    3. 監(jiān)聽到截屏事件后馬上獲取圖片獲取不到,需要延遲一段時(shí)間

    ?

    方案二:通過(guò)ContentObserver監(jiān)聽多媒體圖片庫(kù)資源的變化。當(dāng)手機(jī)上有新的圖片文件產(chǎn)生時(shí)都會(huì)通過(guò)MediaProvider類向圖片數(shù)據(jù)庫(kù)插入一條記錄,以方便系統(tǒng)的圖片庫(kù)進(jìn)行圖片查詢,可以通過(guò)ContentObserver接收?qǐng)D片插入事件,并獲取插入圖片的URI。

    優(yōu)點(diǎn):

    1. 不同手機(jī)觸發(fā)的事件是一樣的

    缺點(diǎn):

    1. 不同手機(jī)截屏文件的前綴可能不同,需要做適配

    2. 監(jiān)聽到截屏事件后馬上獲取圖片獲取不到,需要延遲一段時(shí)間

    ?

    4.1FileObserver實(shí)現(xiàn)

    最開始就是想到這個(gè)方法, 當(dāng)FileObserver監(jiān)聽某個(gè)目錄中資源變化情況,時(shí)候獲取到文件路徑

    ?

    a. 關(guān)鍵代碼:

    ·???????監(jiān)聽到截屏事件后馬上獲取圖片獲取不到,可能需要延遲一段時(shí)間。 做while循環(huán),收到Create時(shí)間后,Thread.sleep(600), 當(dāng)嘗試最大次數(shù)(MAX_TRYS)失敗后放棄。

    ·???????SNAP_SHOT_FOLDER_PATH 的路徑不同手機(jī)不一樣,要去適配各種手機(jī)的路徑

    ·???????需要權(quán)限,否則可能收不到事件。

    (如果沒有收到事件,檢查一下權(quán)限和監(jiān)聽的目錄)

    ?

    b. 小結(jié):

    ·???????每一次截屏,有多個(gè)事件回調(diào)

    ·???????每一次截屏,不同的手機(jī),事件回調(diào)可能有些不同。

    ·???????不同的手機(jī),默認(rèn)截屏圖片儲(chǔ)存的文件夾可能不同

    ·???????FileObserver只能監(jiān)聽文件夾中子文件和子文件夾的變化情況,不能監(jiān)聽子文件夾內(nèi)部的資源變化

    基于 不同的手機(jī),默認(rèn)截屏圖片儲(chǔ)存的文件夾可能不同和 可能收不到事件,這種方法并不能適用于所有的機(jī)型。

    ?

    4.2 .ContentObserver實(shí)現(xiàn)

    放棄了FileObserver方法, 最后選擇了ContentObserver方法。通過(guò)ContentObserver監(jiān)聽多媒體圖片庫(kù)資源的變化。當(dāng)手機(jī)上有新的圖片文件產(chǎn)生時(shí)都會(huì)通過(guò)MediaProvider類向圖片數(shù)據(jù)庫(kù)插入一條記錄,以方便系統(tǒng)的圖片庫(kù)進(jìn)行圖片查詢,可以通過(guò)ContentObserver接收?qǐng)D片插入事件,并獲取插入圖片的URI。

    a.步驟

    (1)添加權(quán)限

    (2)初始化、注冊(cè)和取消監(jiān)聽

    (3)媒體內(nèi)容觀察者 (觀察媒體數(shù)據(jù)庫(kù)的改變)

    (4)數(shù)據(jù)改變時(shí)查詢數(shù)據(jù)庫(kù)中最后加入的一條數(shù)據(jù),處理獲取到的第一行數(shù)據(jù)。

    (5)處理監(jiān)聽到的資源,設(shè)置最大等待時(shí)間500ms (因?yàn)槟承茸迨謾C(jī)保存有延遲)

    (6)設(shè)置回調(diào)工具

    b. 遇到問題:

    主要問題都在第五步:

    (1)因?yàn)槟承茸迨謾C(jī)保存有延遲, 輪詢與延遲,設(shè)置最大等待時(shí)間500ms

    (2)要判斷是否是截屏,有可能是用戶自己再文件夾中添加了一張圖片

    c. 小結(jié):

    ·???????ContentObserver會(huì)監(jiān)聽到所有圖片資源的變化情況,要做好去重過(guò)濾工作

    ·???????根據(jù)uri去讀取ContentProvider內(nèi)容時(shí)候,記得關(guān)閉cursor,防止內(nèi)存泄漏

    ·???????關(guān)鍵字可擴(kuò)展,大大增加的監(jiān)聽的范圍,比FileObserver好用多了,但是去重過(guò)濾會(huì)比FileObserver復(fù)雜一些。

    ?

    ●●●?

    二維碼拼接(bitmap)

    Bitmap縱向拼接

    ?

    參考文獻(xiàn)

    1、Android 截屏事件監(jiān)聽

    https://juejin.im/entry/58647ee9128fe1006d0f4454

    2、Android App內(nèi)截屏監(jiān)控及涂鴉功能實(shí)現(xiàn) https://www.jianshu.com/p/2e6d52abf115

    ?

    ——推薦閱讀——

    Wireshark抓包分析——TCP/IP協(xié)議

    Wireshark對(duì)HTTPS數(shù)據(jù)的解密

    網(wǎng)易云信IM小程序上線?我們是這么做的!>>

    全面復(fù)盤!深度剖析直播答題產(chǎn)品架構(gòu)的難點(diǎn)與坑>>

    如何快速設(shè)計(jì)短信驗(yàn)證碼>>

    如何做好Android 端音視頻測(cè)試>>

    總結(jié)

    以上是生活随笔為你收集整理的Android 截屏监听(截图分享功能实现)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。