ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android – 如何从困难的睡眠中唤醒手机拍照?

2019-09-28 13:25:28  阅读:238  来源: 互联网

标签:wakelock android camera android-wake-lock sleep-mode


我想在几个小时内定期从Android设备的相机拍照,以创建一个时间流逝的视频效果.

我设置了一个Alarm Manager,其AlarmManager.RTC_WAKEUP标志设置为每隔几分钟启动一次服务.

该服务包含部分唤醒锁,有些工作,然后通过启动活动的警报管理器调用广播接收器.

活动被创建(或恢复),打开它自己的唤醒锁,并设置相机预览表面.设置表面后,将调用SurfaceHolder侦听器的surfaceChanged()方法,最终拍摄照片.

如果设备处于唤醒状态,一切都会按预期完美运行.但是如果设备处于睡眠状态,一旦Activity的onResume()方法完成,Activity就会立即暂停.相机的预览表面永远不会完成初始化,也不会拍摄任何照片.

所以我的问题是:

>有没有办法以编程方式唤醒手机?我甚至尝试使用:

PowerManager powerManager =
            (PowerManager)this.getSystemService(Context.POWER_SERVICE);
powerManager.userActivity(SystemClock.currentThreadTimeMillis(),false);

但是,如果手机处于睡眠状态,则不会唤醒手机.

>有没有办法在不使用预览表面视图的情况下拍照?
>有没有办法拍摄不依赖异步回调的图片?我可以将所有代码放在Activities onResume()方法中来拍照吗?
>有没有办法让Activity的onResume()方法运行得足够长,以便摄像机的预览有足够的时间来初始化并调用所有的监听器?

我正确使用了唤醒锁,并且我在清单文件中正确设置了所有权限.我的活动没有保持足够长的时间以使异步侦听器正常工作.

为了解决这个问题,我试图让所有Android 1.6兼容,因为这是我唯一可以访问的测试设备.

这是令人沮丧的事情!

解决方法:

我现在终于到了某个地方.

我必须使用这两个标志创建一个唤醒锁

PowerManager.SCREEN_BRIGHT_WAKE_LOCK|PowerManager.ACQUIRE_CAUSES_WAKEUP

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK|PowerManager.ACQUIRE_CAUSES_WAKEUP, "bbbb");
wl.acquire();

然后设备唤醒,并从键盘锁屏幕开始.

但是,我可以越过键盘屏幕并拍照的唯一方法是在活动窗口上使用这些标志:

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN
    | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
    | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

但这仅适用于Android 2.0,并且在1.6中不起作用.

标签:wakelock,android,camera,android-wake-lock,sleep-mode
来源: https://codeday.me/bug/20190928/1827527.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有