DUPLICATE警告:这个问题适用于服务和前端,有一些类似的线程,但专注于GUI方法.
从任何状态开始(音乐在后台播放,屏幕打开(原文如此!),屏幕关闭,手机锁定,手机解锁等)我想改变状态中的一件事 - 打开屏幕.别的什么都不应该改变.
从某个已知状态开始,我锁定手机并关闭屏幕:
DevicePolicyManager dpm = (DevicePolicyManager)context
.getSystemService(Context.DEVICE_POLICY_SERVICE);
dpm.lockNow();
Run Code Online (Sandbox Code Playgroud)
所以从现在开始,打开屏幕意味着实际显示键盘.我尝试这样做:
userActivity- 一切都没有发生PARTIAL_WAKE_LOCK- 没有任何反应)或它触发屏幕,但只要我保持锁定.一旦我释放它,屏幕就会恢复到关闭状态(尽管我已经ON_AFTER_RELEASE设置好了); 小问题是我必须稍后获得唤醒锁定,lockNow因为否则lockNow将被取消这几乎是由 Anton Cherkashyn 改变屏幕亮度系统设置Android的复制和粘贴
您需要添加触发屏幕的虚假活动:
public class DummyBrightnessActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
//this next line is very important, you need to finish your activity with slight delay
new Handler().postDelayed(new Runnable() {
public void run() {
DummyBrightnessActivity.this.finish();
} },0);
}
}
Run Code Online (Sandbox Code Playgroud)
接下来你必须启动这个活动(在我的情况下,它通常是非活动的,因此背景选项):
new Handler().postDelayed(new Runnable() {
public void run() {
Intent intent = new Intent(context, DummyBrightnessActivity.class);
intent.addFlags(Intent.FLAG_FROM_BACKGROUND | Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
} },500);
Run Code Online (Sandbox Code Playgroud)
您必须在清单中通知您的应用有关此虚假活动:
<activity android:name=".DummyBrightnessActivity"
android:excludeFromRecents="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:taskAffinity="com.antonc.phone_schedule.Dummy">
</activity>
Run Code Online (Sandbox Code Playgroud)
(上面 - 它放在我的应用程序的主命名空间中).
问题是它是冗长而且不可靠 - 第一次延迟(在活动中)适用于0非常好,但第二次......不同的故事,当我做一些记录"350"就足够了,但是一旦我丢弃了记录(因此执行速度更快)我不得不增加价值.
所以现在面对的事实是你有"screenOn"功能,但它不会起作用,因为有些用户会购买更快的手机;-)
无论如何,还在寻找更好的东西......
小智 0
希望以下示例对您有所帮助,不要忘记释放唤醒锁!
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "wakelock_event_name");
wl.acquire();
// Your Code
wl.release()
Run Code Online (Sandbox Code Playgroud)
您也可以使用 // when - 发生这种情况的时间SystemClock.uptimeMillis (); pm.userActivity(当, true/false)
| 归档时间: |
|
| 查看次数: |
1550 次 |
| 最近记录: |