Android デバイスのカメラから数時間にわたって定期的に写真を撮り、タイム ラプス ビデオ効果を作成したいと考えています。
数分ごとにサービスを開始するように AlarmManager.RTC_WAKEUP フラグを設定して、Alarm Manager を設定しました。
このサービスは、部分的なウェイクロックを保持し、いくつかの作業を行った後、アクティビティを開始するアラーム マネージャーを介してブロードキャスト レシーバーを呼び出します。
アクティビティが作成 (または再開) され、独自のウェイクロックがオンになり、カメラ プレビュー サーフェスが設定されます。サーフェスがセットアップされると、SurfaceHolder リスナーの surfaceChanged() メソッドが呼び出され、最終的に写真が撮影されます。
デバイスが起動している場合、すべてが期待どおりに完全に機能します。ただし、デバイスがスリープ状態の場合、Activity の onResume() メソッドが完了すると、Activity は即座に一時停止します。カメラのプレビュー サーフェイスの初期化が完了することはなく、写真が撮影されることもありません。
だから私が持っている質問は次のとおりです。
プログラムで電話をウェイクアップする方法はありますか? 私も使ってみます:
PowerManager powerManager = (PowerManager)this.getSystemService(Context.POWER_SERVICE); powerManager.userActivity(SystemClock.currentThreadTimeMillis(),false);
ただし、電話がスリープ状態の場合、それは電話を目覚めさせません。
プレビュー サーフェス ビューを使用せずに写真を撮る方法はありますか?
非同期コールバックに依存しない写真を撮る方法はありますか? 写真を撮るためにすべてのコードをアクティビティの onResume() メソッドに入れることはできますか?
カメラのプレビューがすべてのリスナーを初期化して呼び出すのに十分な時間を確保できるように、アクティビティの onResume() メソッドを十分長く実行し続ける方法はありますか?
ウェイクロックを正しく使用しており、マニフェスト ファイルですべての権限を適切に設定しています。非同期リスナーが適切に機能するのに十分な時間、アクティビティが起動していません。
さらに問題を複雑にしているのは、すべての Android 1.6 との互換性を維持しようとしていることです。これは、私がアクセスできる唯一のテスト デバイスだからです。
これはイライラするものです!