【问题标题】:How to make screen flashing/blinking from background service on Android device?如何在 Android 设备上通过后台服务使屏幕闪烁/闪烁?
【发布时间】:2014-07-16 01:24:02
【问题描述】:

我打算做一个后台服务,这将使屏幕闪烁/闪烁,直到用户触摸屏幕。

我不知道如何让屏幕闪烁 - 只知道可以通过生成的活动通过亮度和控制来完成的知识。

想要通过屏幕上的颜色变化进行闪烁,即黑白或屏幕开/关,以使其比亮度更明显。

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

    我用它来闪烁屏幕,在这段代码中我的 relativeLayout (HomeLayout) 会闪烁。

    Animation animation = new AlphaAnimation(1, 0); // Change alpha
    // from fully
    // visible to
    // invisible
    animation.setDuration(500); // duration - half a second
    animation.setInterpolator(new LinearInterpolator()); // do not alter
    // animation
    // rate
    animation.setRepeatCount(Animation.INFINITE); // Repeat animation
    // infinitely
    animation.setRepeatMode(Animation.REVERSE); // Reverse animation at
    
    // the
    // end so the layout will
    // fade back in
    relativeLayout.startAnimation(animation);
    

    添加此代码,当您触摸屏幕或按钮以清除动画时。

    relativeLayout.clearAnimation();
    

    【讨论】:

    • 我将很快测试 - 它是否作为覆盖工作意味着某些后台服务可以调用它以在前端显示?
    • @Chameleon:我现在不会调用任何后台服务,我确实会在屏幕闪烁时播放提示音。所以根据您的意愿更改此代码。 :)
    • 意思是如果可以从后台服务控制屏幕闪烁 - 不知道是否可以:)
    • @Chameleon:对不起,我不知道。就我而言,这就足够了,这就是为什么我不能这样做。
    • @Aerrow 抱歉,但是.. 输入您的代码后,我的 Eclipse 无法解析相关布局,您能帮帮我吗?
    【解决方案2】:

    通过您的服务,您可以与WakeLock 进行交互:

    通过以下方式获取WakeLock

    PowerManager powerMan = (PowerManager) getSystemService(Context.POWER_SERVICE);
    PowerManager.WakeLock wakeLock = powerMan.newWakeLock(
                         PowerManager.SCREEN_DIM_WAKE_LOCK | 
                         PowerManager.ACQUIRE_CAUSES_WAKEUP, "wakelockTag");
    

    然后打开屏幕:

    wakeLock.acquire();
    

    然后再次将其关闭:

    wakeLock.release(); 
    

    您可以将其放入带有睡眠的Thread 或使用Timer 来创建闪存。

    例如:

    new Thread() {
                public void run() {
                    boolean screenOn = false;
                    for (int i = 0; i < 5; i++) {
                        try {
                            sleep(500);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        if (screenOn) {
                            wakeLock.acquire();
                        } else {
                            wakeLock.release();
                        }
                    }
                }
            }.run();
    

    它不会是黑/白,只是开/关。

    如果你想变成黑色/白色,你还必须解除KeyLock(查找Android Keyguard),然后按下完全黑色的Activity,然后更改ActivityTimerThread 上的 White 和以前一样。更多的工作。

    记得在AndroidManifest.xml获取权限:

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

    如果您沿着那条路线解锁KeyGuard,则需要额外的权限。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-27
      • 1970-01-01
      相关资源
      最近更新 更多