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

Android後台靜默拍照:懸浮窗透明像素欺騙系統保持相機權限

     編輯:程式設計綜合問答

核心思路

Android 6.0+要求顯式用戶授權且**前台可見**才能使用相機。後台靜默拍照需繞過此限制。

方案:1像素透明懸浮窗

  1. 創建Service,類型TYPE_APPLICATION_OVERLAY(Android 8.0+)或TYPE_SYSTEM_ALERT(舊版)。
  2. 添加1x1像素透明View(或極小SurfaceView)到WindowManager。
  3. 系統認為應用有「可見界面」,允許相機後台使用。
  4. 在Service中啟動Camera/Camera2拍照,無預覽或預覽設置為懸浮窗Surface。

關鍵代碼

public class CameraService extends Service {
    private WindowManager wm;
    private View floatView;
    
    @Override
    public void onCreate() {
        super.onCreate();
        wm = (WindowManager) getSystemService(WINDOW_SERVICE);
        floatView = new View(this);
        floatView.setBackgroundColor(Color.TRANSPARENT);
        
        WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            1, 1, // 1x1像素
            Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ?
                WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY :
                WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
            WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE |
            WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
            PixelFormat.TRANSPARENT);
        params.gravity = Gravity.START | Gravity.TOP;
        wm.addView(floatView, params);
        
        // 啟動相機拍照邏輯
        startCameraCapture();
    }
    
    @Override
    public void onDestroy() {
        if (floatView != null) wm.removeView(floatView);
        super.onDestroy();
    }
}

權限聲明

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <!-- 懸浮窗 -->
<uses-feature android:name="android.hardware.camera" android:required="true" />

風險與合規

  • Google Play政策禁止**:未經用戶明確知情同意的後台拍照屬惡意行為,上架會被拒/下架。
  • Android 10+限制**:後台啟動Activity/Service受限,需REQUEST_COMPANION_RUN_IN_BACKGROUND等豁免。
  • 僅用於合法場景**:防盜追蹤(用戶授權)、工業檢測設備、根設備測試。

替代合法方案

  • 前台服務startForeground顯示通知「正在拍照」,用戶可見可控。
  • CameraX ProcessCameraProvider配合LifecycleOwner正規生命周期管理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved