如何唤醒Android Wear当它处于睡眠模式? [英] How to wake up Android Wear when it is in sleep mode?

查看:305
本文介绍了如何唤醒Android Wear当它处于睡眠模式?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Android Wear进入睡眠模式(屏幕变暗),不执行我的code某些部分。我使用定时器在后台服务触发某些动作,例如发送从磨损数据至移动,但数据不被发送。当我点击屏幕来唤醒它发送。

When Android Wear goes to sleep mode (screen dimmed), some parts of my code are not executed. I use Timer in background service to trigger some actions, such as sending data from wear to mobile, but the data is not sent. It is sent when I tap the screen to wake it up.

我也尝试使用定时器触发振动通知,当屏幕处于关闭状态,但它并没有出现,直到我点击屏幕。

I also try to use Timer trigger a notification with vibration when the screen is off, but it doesn't appear until I tap the screen.

在调试模式(无论是蓝牙或USB),数据的发送和通知做工精细。

In debug mode (either Bluetooth or USB), data sending and notification work fine.

我怀疑这是因为当Android Wear处于睡眠模式时,其CPU工作在最低水平,因为计时器仍在运行,但不适合GoogleApiClient,IntentService或通知。

I suspect this is because when Android Wear is in sleep mode, its CPU works at minimum level because the Timer is still running, but not for GoogleApiClient, IntentService, or Notification.

我已经尝试了许多方法来唤醒CPU了,如AlarmManager,电源管理器,Wakelock,但它并没有为Android Wear工作。

I have tried many ways to wake CPU up such as AlarmManager, PowerManager, Wakelock, but it did not work for Android Wear.

任何人都遇到这个问题?有什么解决办法?

Anyone has encountered this problem? What is the solution?

推荐答案

我用 PowerManger 每次我收到消息处理设备的时间来唤醒我可穿戴设备。 不要忘了松开 PowerManager.WakeLock

I'm using PowerManger to wakeup my wearable device each time i receive message from handled device. Do not forget to release PowerManager.WakeLock

public abstract class WatchFaceActivity extends Activity {

    private PowerManager.WakeLock mWakeLock;
    private Handler mWakeLockHandler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_clock_watch_face);

        PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
        mWakeLock = powerManager.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "MyWakelockTag");

        mWakeLockHandler = new Handler();

        IntentFilter messageFilter = new IntentFilter("message-forwarded-from-data-layer");
        MessageReceiver messageReceiver = new MessageReceiver();
        LocalBroadcastManager.getInstance(this).registerReceiver(messageReceiver, messageFilter);
    }

    public class MessageReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            if (!mWakeLock.isHeld()) {
                mWakeLock.acquire();
            }
            mWakeLockHandler.removeCallbacksAndMessages(null);
            mWakeLockHandler.postDelayed(mReleaseRunnable, 5000);
        }
    }

    private Runnable mReleaseRunnable = new Runnable() {

        @Override
        public void run() {
            mWakeLock.release();
        }
    };


    @Override
    protected void onDestroy() {
        super.onDestroy();
        mWakeLockHandler.removeCallbacksAndMessages(null);
        mWakeLock.release();
    }
}

和允许WAKE_UP许可,您的清单。

And allow WAKE_UP permission in your Manifest.

<uses-permission android:name="android.permission.WAKE_LOCK" />

这篇关于如何唤醒Android Wear当它处于睡眠模式?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆