6

私はAndroidコーディングを始めたばかりなので、質問を投稿するのをためらっていましたが、今は抵抗できないところにいます。

カメラをオンにするサービスがあります-LEDonCreate:

@Override
public void onCreate() {
// make sure we don't sleep
this.pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
this.mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "SleepLED");

    this.mTimer = new Timer();
    this.mTimerTask = new TimerTask() {
        public void run() {
        // turn on the LED
        setFlashlight(Camera.Parameters.FLASH_MODE_TORCH);

        mWakeLock.acquire();
        }
    };

    // Get the notification-service
    this.mNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
    // Display a notification about us starting.  We put an icon in the status bar.
    showNotification();

    // Open camera
    this.frontCam = Camera.open();
    this.frontCamPara = frontCam.getParameters();
    this.frontCam.lock();


    // Schedule the TimerTask
    this.mTimer.schedule(mTimerTask, 0);
}

WakeLockが取得したことがわかります。私は、FULL_WAKE_LOCKでテストしましたが、スクリーンタイムアウトを考慮してオフになりませんでした。しかし、画面をオンにする必要がないので、完全なウェイクロックを使用したくありません。

私の電話用のCyanogenmod(HTC Legend)は、私がやりたいことを実行できるトーチアプリをもたらします。そのソースコードはここにあります:
https
://github.com/CyanogenMod/android_packages_apps_Torch/tree/gingerbread/src/net/cactii/flash2 これがヒントである場合、そのアプリでライトが少しの間オフになることに気づきました誰か、明らかに私のためではありません;(

誰かが私のコードを変更して私が望むことをすることは期待していませんが、誰かが私を正しい方向に向けることができれば幸いです!

挨拶
SJ

4

3 に答える 3

2

私はその問題の解決策を見つけました。電話が画面をオフにすると、カメラのLEDは非アクティブになりますが、ユーザーは次のように再アクティブにできます。

@Override
public void onCreate() {
    // assume we start with screen on and save that state ;-)
    this.pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    screenOn = this.pm.isScreenOn();

    // program a timer which checks if the light needs to be re-activated
    this.mTimer = new Timer();
    this.mTimerTask = new TimerTask() {
        public void run() {
            // re-activate the LED if screen turned off
            if(!pm.isScreenOn() && pm.isScreenOn() != screenOn) {
                Log.i("SleepLEDservice", "re-activated the LED");

                // really it's NOT ENOUGH to just "turn it on", i double-checked this
                setFlashlight(Camera.Parameters.FLASH_MODE_OFF);
                setFlashlight(Camera.Parameters.FLASH_MODE_TORCH);
            }
            screenOn = pm.isScreenOn();                 
        }
    };
}

private void setFlashlight(String newMode) {
    try {
        this.frontCamPara = this.frontCam.getParameters();
        if(this.frontCamPara.getFlashMode() != newMode) {
            this.frontCamPara.setFlashMode(newMode);
            this.frontCam.setParameters(frontCamPara);  
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

重要なのは、状態をFLASH_MODE_OFFに戻し、FLASH_MODE_TORCHに戻すことです。

于 2011-11-17T21:06:40.407 に答える
1

HTCがこのキャンプにいるかどうかはわかりませんが、いくつかのデバイス(特に、Moto Droid)は、画面がオフのときにカメラを使用できません。これらのデバイスは、この方法で電話を使用したくないと想定しているので便利です。画面がロックされると、カメラを使用しているアプリがバックグラウンドに置かれ、実行を停止します。

その結果、私が見たセキュリティカム/ウェブカメラアプリには画面を暗く/黒くする機能がありますが、実際には画面をロックすることはできません。これにより、カメラは引き続き動作します。

LEDはカメラハードウェアの一部と見なされているため、同じ制限に直面しているのではないかと思います。

于 2011-11-16T16:52:45.663 に答える
0

私はstefanjunkersと同じようなことをしましたが、それを機能させるのに問題があり、ライトが再び点灯して点灯したままになることもあれば、再び点灯してすぐに再び消灯することもありました。少しいじった後、スレッドを一時停止すると解決したことがわかりました。

setFlashlight(Camera.Parameters.FLASH_MODE_OFF);
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
setFlashlight(Camera.Parameters.FLASH_MODE_TORCH);
于 2014-01-14T13:30:25.280 に答える