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

Android 偵測裝置長時間無操作:實現展示機自動播放宣傳片

     編輯:程式設計綜合問答

需求場景

商店展示機需在用戶無操作一段時間後,自動播放宣傳影片;使用者觸碰螢幕則回到互動介面。

核心機制:重置閒置計時器

在 Application 或基底 Activity 中攔截所有觸控/按鍵事件,重置倒數計時器。

完整實作方案

public class MyApplication extends Application {
    private static final long IDLE_TIMEOUT_MS = 5 * 60 * 1000; // 5 分鐘
    private Handler handler = new Handler(Looper.getMainLooper());
    private Runnable idleAction = this::startAttractMode;

    @Override
    public void onCreate() {
        super.onCreate();
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override public void onActivityResumed(Activity act) { resetIdleTimer(); }
            // 其他回調留空
        });
    }

    public void resetIdleTimer() {
        handler.removeCallbacks(idleAction);
        handler.postDelayed(idleAction, IDLE_TIMEOUT_MS);
    }

    private void startAttractMode() {
        // 啟動宣傳片 Activity,或發送全域廣播通知當前 Activity 切換
        Intent intent = new Intent(this, AttractVideoActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
    }
}

關鍵細節

  • 攔截範圍: dispatchTouchEvent / onKeyDown 可捕獲觸控、實體鍵;若需捕獲系統級事件 (如掃描槍、NFC),可在 ViewGroup 根佈局 setOnTouchListener。
  • 螢幕熄滅 vs 使用者鎖定: ACTION_SCREEN_OFF 無法區分自動熄屏與按電源鍵。不依賴螢幕狀態,改用「使用者輸入事件重置計時器」 才是正確邏輯。
  • 防止多重啟動: handler.removeCallbacks 確保同一時間只有一個倒數任務。
  • 宣傳片結束/使用者觸碰返回: 在 AttractVideoActivity.onTouchEvent 中 finish() 返回主介面,並呼叫 ((MyApplication)getApplication()).resetIdleTimer()。

替代方案:系統級螢幕保護程式

Android 4.2+ 支援 DreamService (Daydream/螢幕保護程式),可在充電/靜止時自動啟動,但無法精確控制「無操作 N 分鐘」觸發條件,且需用戶在設定中啟用,適合簡單場景。

推薦:應用層計時器 + 事件攔截,邏輯可控、不依賴系統設定、支援複雜業務流程。

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