私は、デバイスが接続されているとき、つまりドックを介して、画面がウェイクロックを取得する単純な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();
}
}
これが機能する方法はありますか?ウェイクロックが取得されたときに実行されているサービスが必要であり、電源が切断されたら、サービスを解放して停止します。
あなたが提供できるどんな助けにも感謝します。