2011-12-21 28 views
0

我已经使用警报管理器来调用一个活动,我使用wake locker class onRecive()来唤醒电话,然后在活动结束后调用WakeLocker.release()但屏幕仍然停留在...WakeLock没有释放和屏幕不关闭

Receive.class:

public class MyScheduledReceiver extends BroadcastReceiver { 


@Override 
public void onReceive(Context context, Intent intent) { 
    WakeLocker.acquire(context); 

Activity.class

@Override 
    protected void onPause() { 
     // TODO Auto-generated method stub 
     super.onPause(); 
     WakeLocker.release(); 
     finish(); 
     } 

我已经把它在的onPause()的onStop()无处不在。 ..事情瓦特on't释放和我的应用程序关闭后屏幕不会自动关闭......

+0

这是什么WakeLocker类? – 2011-12-21 20:22:32

+0

[http://stackoverflow.com/questions/6864712/android-alarmmanager-not-waking-phone-up?answertab=active#tab-top] – user961389 2011-12-21 20:24:21

+0

它看起来大部分都适合我。你怎么知道它没有释放?是否因为屏幕不能立即关闭?如果是这样,那是因为你的WakeLocker类中有PowerManager.ON_AFTER_RELEASE。 – 2011-12-22 13:39:11

回答

1

确保您请求权限

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

它已经在那里... – user961389 2011-12-21 20:20:57

0

你开始在一个BroadcastReceiver的激活锁定,并在活动停止它。 您正在引用2个不同的唤醒锁实例。您应该从接受方开始执行活动,并在onresume中获取唤醒锁定,然后如果发生这种情况,仍然可以在onpause中释放。

您绝不应该在广播接收器内启动一段时间,因为接收器会尽快销毁。

+0

我开始在onReceive ...在我获得wakelock之后...'Intent scheduledIntent = new Intent(context,Activity.class); ' \t \t scheduledIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); \t \t context.startActivity(scheduledIntent); – user961389 2011-12-21 20:37:54

+0

这一行:'WakeLocker.acquire(context);'应该从'onReceive'中移除,然后添加到您启动的Activity的'onResume'上。使用你的问题中的代码,你可以在你的'onReceive'中创建一个'WakeLock',然后在'onPause'中释放一个不同的代码。 – Jakar 2011-12-21 20:47:11

+0

无法正常工作......当广播接收器启动活动结束后,我应该随时取得广播接收器中的WL以唤醒电话并释放WL。 – user961389 2011-12-21 21:46:11

0

试试这个

PowerManager pm; 
PowerManager.WakeLock wakeLock; 

pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
        wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, 
          "x2_wakelook"); 


wakeLock.acquire(); 
wakeLock.release();