2015-04-06 45 views
0

我希望我的应用程序在后台运行或手机已进入睡眠状态并且当您接近某个经纬度时,我的应用程序将立即弹出到前台。无论是从睡梦中还是其他应用程序在前台,这都必须工作。 我正在使用一项服务和一个WakeLock。我很确定服务正在工作,但我不知道如何检查,因为如果调试器不在foregrond中,它将不会返回任何内容。如果它正在工作,那么我的WakeLock不能按预期工作。如何使WakeLock流行应用程序到前台

public abstract class WakeLocker { 

private static PowerManager.WakeLock fullWakeLock; 
private static PowerManager.WakeLock partialWakeLock; 
private static PowerManager pm; 

public static void acquire(Context context) { 
    if (fullWakeLock != null) fullWakeLock.release(); 
    if (partialWakeLock != null) partialWakeLock.release(); 

    pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 
    fullWakeLock = pm.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | 
      PowerManager.FULL_WAKE_LOCK | 
      PowerManager.ACQUIRE_CAUSES_WAKEUP), "Loneworker - FULL WAKE LOCK"); 
    partialWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Loneworker - PARTIAL WAKE LOCK"); 
    partialWakeLock.acquire(); 
} 

public static void release() { 
    if (fullWakeLock != null) { 
     fullWakeLock.release(); 
     fullWakeLock = null; 
    } 
    if (partialWakeLock != null) { 
     partialWakeLock.release(); 
     partialWakeLock = null; 
    } 
} 

public static void wakeDevice(Context context) { 
     fullWakeLock.acquire(); 

     //KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE); 
     //KeyguardManager.KeyguardLock keyguardLock = keyguardManager.newKeyguardLock("TAG"); 
     //keyguardLock.disableKeyguard(); 

} 

public static boolean fullWakeLockActive() { 
    return fullWakeLock != null; 
} 

}

的fullWakeLock正在这里

if (makeUseOfNewLocation(location) < 20) { 
       if (WakeLocker.fullWakeLockActive()) 
        WakeLocker.wakeDevice(allert.getMA()); 
       if (callProgress.isOffHook()) { 
        new BlinkBack(allert.getMA()); 
       } 

回答

0

收购唤醒锁本身不能从睡眠状态唤醒的设备或导致这么来的前景。您必须使用位置服务或闹钟来唤醒设备,然后使用唤醒锁来保持设备醒来,并将应用程序的UI组件触发到前台。

+0

所以按照我的建议找到了。 public void addProximityAlert(double latitude,double longitude,float radius,long expiration,PendingIntent intent)。我假设我使用这个意图,但是我怎么把它带到前台或者用这个来唤醒电话? – Chad

+0

从文档不清楚,但添加接近警报应该会导致系统定期醒来检查位置,如果您已输入该区域,则会通知您。你需要为'BroadcastReceiver'使用'PendingIntent'。然后你的接收器可以激活你的用户界面,发布通知等,通过发射它自己的“意图”。尽管如此,你很可能需要管理你自己的'Wakelock'。查看'WakefulReceiver'作为处理应用程序锁定的更简单的方法。 –

+0

好吧,我看着addproximityalert,我决定,它可能不是要走的路,因为我已经建立了逻辑来发射一大堆东西。这工作。如果(makeUseOfNewLocation(location)<20){allert.getContext()。sendBroadcast(new Intent(allert.getContext(),MainActivity.class)); if(WakeLocker.fullWakeLockActive()) WakeLocker.wakeDevice(allert.getMA()); 如果是这样,我假设我把接收器放在我的后台服务中? – Chad

相关问题