首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >唤醒Android设备

唤醒Android设备
EN

Stack Overflow用户
提问于 2010-09-02 03:45:20
回答 8查看 88.5K关注 0票数 44

嘿,我需要在某个时间唤醒我熟睡的安卓设备。有什么建议吗?

附言:唤醒:打开显示屏,或许解锁手机

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-09-02 09:09:07

最好是使用这些窗口标志的一些适当的组合:

http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_DISMISS_KEYGUARD

http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_SHOW_WHEN_LOCKED

http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_KEEP_SCREEN_ON

http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_TURN_SCREEN_ON

如果你想在不支持所需标志的旧版本平台上运行,你可以直接使用唤醒锁和键盘锁……但这条道路充满了危险。

一个重要的注意事项:您的activity 必须是全屏,上面的标志组合才能工作。在我的应用程序中,我尝试在一个非全屏(对话主题)的活动中使用这些标志,但它不起作用。看完文档后,我发现这些标志要求窗口是全屏窗口。

票数 35
EN

Stack Overflow用户

发布于 2012-04-17 02:55:03

要唤醒屏幕:

代码语言:javascript
复制
PowerManager pm = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE);
WakeLock wakeLock = pm.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "TAG");
wakeLock.acquire();

要释放屏幕锁定,请执行以下操作:

代码语言:javascript
复制
KeyguardManager keyguardManager = (KeyguardManager) getApplicationContext().getSystemService(Context.KEYGUARD_SERVICE); 
KeyguardLock keyguardLock = keyguardManager.newKeyguardLock("TAG");
keyguardLock.disableKeyguard();

并且清单需要包含:

代码语言:javascript
复制
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />

有关PowerManager的更多详细信息,请参阅接口文档:http://developer.android.com/reference/android/os/PowerManager.html

EDIT:此答案被报告为已弃用。

票数 78
EN

Stack Overflow用户

发布于 2010-12-28 05:32:51

我找到了一种方法,它并不是那么复杂...适用于任何API版本。

您需要使用PowerManager.userActivity(l, false)方法,并将您的活动注册为用于SCREEN_OFF意图的广播接收:

在你的actiivity中,OnCreate放了一些类似的东西:

代码语言:javascript
复制
mReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.v(TAG, "Screen OFF onReceive()");
        screenOFFHandler.sendEmptyMessageDelayed(0, 2000L);
    }
};

它将在2秒的屏幕关闭事件后启动处理程序。

在onResume()方法中注册接收器:

代码语言:javascript
复制
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
registerReceiver(mReceiver, filter);
Log.i(TAG, "broadcast receiver registered!");

创建一个如下所示的处理程序:

代码语言:javascript
复制
private Handler screenOFFHandler = new Handler() {

    @Override
    public void handleMessage(Message msg) {

        super.handleMessage(msg);
        // do something
        // wake up phone
        Log.i(TAG, "ake up the phone and disable keyguard");
        PowerManager powerManager = (PowerManager) YourActivityName.this
                .getSystemService(Context.POWER_SERVICE);
        long l = SystemClock.uptimeMillis();
        powerManager.userActivity(l, false);//false will bring the screen back as bright as it was, true - will dim it
    }
};

请求清单文件中的权限:

代码语言:javascript
复制
<uses-permission android:name="android.permission.WAKE_LOCK" />

完成后,不要忘记注销broadcast receiver。例如,您可以在onDestroy()中这样做(这是不能保证的)

代码语言:javascript
复制
unregisterReceiver(mReceiver);
Log.i(TAG, "broadcast UNregistred!");
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3621599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档