Android Wear 기기의 디스플레이를 켜고 끌 때 사용하는 휴대 기기의 버튼 하나에 불과한 매우 간단한 Android Wear 앱이 있습니다. Android Wear 기기에 화면 상태에 따라 wakeLock을 획득하거나 해제하라는 메시지를 보내는 응용 프로그램이 있습니다. wakeLock.acquire()는 완벽하게 작동하지만 wakeLock을 해제하라는 메시지를 보낼 때 응용 프로그램이 잘못 작동합니다. wakeLock을 얻는 것은 항상 효과가있는 것으로 보이지만이를 풀어주는 것은 다음 중 하나를 초래할 것입니다. 충돌하거나 "불행히도 앱이 작동을 멈췄습니다"라고 말하면서 또는 아무 것도하지 않습니다 (마치 내가 wakeLock 그래서 릴리스 호출을 포함하는 if-statment를 입력하지 않거나) wakeLock.release()에 대한 호출이 실제로 잠금을 해제하지 않는 것처럼 보입니다 (화면이 어두워지지 않음). 어떤 아이디어?wakeLock을 해제하면 Android Wear 앱이 작동하지 않습니다.
모바일 장치 코드 :
// sendToast is the onClickListener function for my toggleButton
private void sendToast() {
if(isChecked(findViewById(R.id.toggleButton)))
message = ON_MESSAGE;
else
message = OFF_MESSAGE;
if (nodeId != null) {
new Thread(new Runnable() {
@Override
public void run() {
client.blockingConnect(CONNECTION_TIME_OUT_MS, TimeUnit.MILLISECONDS);
Wearable.MessageApi.sendMessage(client, nodeId, message, null);
client.disconnect();
}
}).start();
}
}
private boolean isChecked(View view) {
if (((ToggleButton) view).isChecked())
return true;
else
return false;
}
착용 장치 코드 :
public class ListenerService extends WearableListenerService {
private PowerManager powerManager;
private PowerManager.WakeLock wakeLock;
private static final String ON_MESSAGE = "On!";
private static final String OFF_MESSAGE = "Off!";
boolean first = true;
private void setupWakeLock() {
powerManager = (PowerManager) getSystemService(POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK |
PowerManager.ACQUIRE_CAUSES_WAKEUP, "wakeLock"); // SCREEN_BRIGHT_WAKE_LOCK
}
@Override
public void onMessageReceived(MessageEvent messageEvent) {
if (first) {
setupWakeLock();
first = false;
}
Toast.makeText(this, wakeLock.toString(), Toast.LENGTH_LONG).show();
if (messageEvent.getPath().equals(ON_MESSAGE)) {
if (!wakeLock.isHeld()) {
wakeLock.acquire();
Toast.makeText(this, ON_MESSAGE, Toast.LENGTH_LONG).show();
}
} else if (messageEvent.getPath().equals(OFF_MESSAGE)) {
if (wakeLock.isHeld()) {
wakeLock.release();
Toast.makeText(this, OFF_MESSAGE, Toast.LENGTH_LONG).show();
}
}
}
private void showToast(String message) {
Toast.makeText(this, message, Toast.LENGTH_LONG).show();
}
}
은 내가 GitHub의에서 발견 프로젝트를 프로젝트를 기반으로 주변에 몇 가지 변경되었습니다. 나 자신의 사용을위한 일회용 작은 응용 프로그램 배포를위한 애플 리케이션을 개발하려하지 않고있다. Android Wear 코드가 Listener Service에 있기 때문에 wakeLock을 사용하고 있습니다 (활동이 없으므로 깃발을 구하고 설정할 수있는 창이 없습니다). Asus 태블릿과 Round Android Wear 에뮬레이터를 사용하여 테스트하고 있습니다. 디스플레이를 켜거나 끄는 것은 내가 봤던 타사 앱에서 지원을 찾을 수없는 단순한 기능이다. 그리고 나에게 많은 어려움을 겪고 있다는 사실은 완전히 미친 짓이다. 어떤 아이디어라도 대단히 감사하겠습니다!