0

私は、デバイスが接続されているとき、つまりドックを介して、画面がウェイクロックを取得する単純なAndroidアプリで作業しようとしています。これにより、どのアプリが接続されていても、ウェイクを抜いたときに画面がオフにならないようになります。ロックが解除されます。

現時点では、必要ないと思っていたため、サービスを実行していません。電源が接続され、電源が切断された場合のブロードキャストインテントを受信します。電源が接続されている場合は、ウェイクロックを正常に取得しているように見えますが、電源が切断されている場合は、ウェイクロックを解放しようとしますが、代わりにnullポインタ例外をスローします。アプリが必ずしも実行されているわけではなく、サービスがないため、変数が保持されないためだと思います。

以下は、ブロードキャストを受信するために使用しているコードです。

public class BroadcastReceiveDetection extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) 
    {
        ManageScreenLight manageScreenLight = new ManageScreenLight(context);
        String action = intent.getAction();

        if (action == Intent.ACTION_POWER_CONNECTED)
        {
            manageScreenLight.receivedPowerConnected();
        }
        else if (action == Intent.ACTION_POWER_DISCONNECTED)
        {
            try {
                manageScreenLight.receivedPowerDisconnected();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

以下は、ウェイクロックを取得して解放するコードです。

Context context;
    PowerManager.WakeLock wakeLock;
    public ManageScreenLight(Context context)
    {
        this.context = context;
    }

    public void receivedPowerConnected()
    {
        Toast.makeText(context, "Power connected", Toast.LENGTH_LONG).show();

        PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
        wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "ScreenStay");
        wakeLock.acquire();
    }

        public void receivedPowerDisconnected() throws IOException
{
    try
    {
        Toast.makeText(context, "Power disconnected", Toast.LENGTH_LONG).show();
        wakeLock.release();
    }
    catch (Exception ex)
    {
        Toast.makeText(context, ex.toString(), Toast.LENGTH_LONG).show();
    }
}

これが機能する方法はありますか?ウェイクロックが取得されたときに実行されているサービスが必要であり、電源が切断されたら、サービスを解放して停止します。

あなたが提供できるどんな助けにも感謝します。

4

1 に答える 1

0

BroadcastReceiverのドキュメントに基づくとonReceive()、アプリケーションが強制終了されても呼び出されないようです。これは理にかなっています。Androidは、を呼び出すためだけにアプリケーションを強制終了した場合、アプリケーションを起動しませんonReceive()。これらのイベントの受信/応答を継続する場合は、サービスを使用する必要があります。

于 2012-10-26T20:17:13.070 に答える