2013-01-21 66 views
4

我打算做后台服务,这将使屏幕闪烁/闪烁,直到用户触摸屏幕。如何让Android设备上的后台服务闪烁/闪烁屏幕?

我不知道如何使屏幕闪烁的方法 - 只有通过产生的活动才能学习到亮度和控制。

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

回答

4

从你的服务,你可以与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键盘保护),然后按下一个Activity这是全黑的,然后更改Activity白上一个Timer或在之前的Thread中。更多的工作。

记住要获得许可在AndroidManifest.xml

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

其他权限将需要解锁KeyGuard如果你走这条路线。

11

我用这个屏幕闪烁,在这段代码中,我的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(); 
+0

我会尽快测试 - 它是否可以作为覆盖表示一些后台服务可以调用它来显示在前端? – Chameleon

+0

@Chameleon:我现在不会拨打任何后台服务,当屏幕闪烁时,我确实会发出声音。所以请根据您的意愿更改此代码。 :) – Aerrow

+0

意思是说,如果有可能控制从后台服务屏幕闪烁 - 不知道是否有可能:) – Chameleon