首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android Activity 截圖功能實現:無需 Root,使用 View 繪圖快取

     編輯:程式設計疑難解答

核心 API:View.getDrawingCache()

public Bitmap captureActivity(Activity activity) {
    View decorView = activity.getWindow().getDecorView(); // 根視圖
    decorView.setDrawingCacheEnabled(true);
    decorView.buildDrawingCache(); // 強制構建快取
    Bitmap bitmap = decorView.getDrawingCache();
    if (bitmap != null) {
        bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, false); // 複製一份,避免快取銷毀後失效
    }
    decorView.destroyDrawingCache(); // 釋放快取
    decorView.setDrawingCacheEnabled(false);
    return bitmap;
}

儲存至相簿

public void saveToGallery(Context context, Bitmap bitmap, String fileName) {
    MediaStore.Images.Media.insertImage(context.getContentResolver(), bitmap, fileName, "截圖");
    // Android 10+ 建議使用 MediaStore 插入 API
}

注意事項

  • Dialog、PopupWindow、SurfaceView/TextureView 內容可能不在 DecorView 樹中,需分別處理。
  • 硬體加速:部分機型需在 Manifest <application android:hardwareAccelerated="false"> 或對該 View setLayerType(LAYER_TYPE_SOFTWARE, null)。
  • 長截圖:需遞迴處理 ScrollView/RecyclerView,或使用 PixelCopy (API 26+)。
  • 權限:Android 10 (Q) 以上無需儲存權限直接寫入 MediaStore;Android 9 及以下需 WRITE_EXTERNAL_STORAGE。

現代替代方案

Android 14+ 推薦 MediaProjection 系統級截圖/錄屏 API,無需處理 View 層級細節,支援跨應用、安全性更高。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved