Android 部分尾流锁不工作

Android 部分尾流锁不工作,android,android-activity,android-wake-lock,Android,Android Activity,Android Wake Lock,我写这段代码是为了在屏幕关闭时唤醒我的活动 private PowerManager mPM; private PowerManager.WakeLock mPartialWakeLock; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //some code mPM = (PowerManager)

我写这段代码是为了在屏幕关闭时唤醒我的活动

private PowerManager mPM;
private PowerManager.WakeLock mPartialWakeLock;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

//some code

mPM = (PowerManager) getActivity().getSystemService(Context.POWER_SERVICE);
if (mPM == null) {
Log.e(TAG, "PowerManager is null");
}

try {
mPartialWakeLock = mPM.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK , "LOG");
    mPartialWakeLock.aquire();
}
catch (Exception e) {Log.i(TAG, "mPM.newWakeLock() EXCEPTION="+e.toString());}

问题是当屏幕关闭时,应用程序会暂停。

如果您想在调用活动时解锁屏幕,请尝试使用此选项

Window wind;
wind = this.getWindow();
wind.addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD);
wind.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED);
wind.addFlags(LayoutParams.FLAG_TURN_SCREEN_ON);
如果防止屏幕锁定,只需将以下代码写入xml文件即可防止屏幕锁定

android:keepScreenOn="true"

我目前正在一个应用程序中使用以下部分唤醒锁:

public class my_frag extends Fragment {
    WakeLock wl; 

    //on create, config changed, etc

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    setRetainInstance(true);        
    PowerManager pm = (PowerManager) this.getActivity().getSystemService(Context.POWER_SERVICE);
    wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock");  

    //I happen to have it in a button click event based on an async task 
    //(Side note: I should probably be using a Loader for my Async task but this works too) 
    //Just move it outside the button click if you don`t need it there

    connectButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            if (metrics_task != null)
            {
            Status s = metrics_task.getStatus();
            if (s.name().equals("RUNNING")){
                if (metrics_task.running){
                metrics_task.cancel(true);
                connectButton.setText("Start");
                metrics_task.running = false;
                wl.release(); <--releases it on async stop
                }
                else{
                    metrics_task = new start_metrics(ae);
                    metrics_task.execute();
                    wl.acquire(); <--starts it on async start
                }
            }
            else{

                metrics_task = new start_metrics(ae);
                metrics_task.execute();

            }
            }
            else{
                metrics_task = new start_metrics(ae);
                metrics_task.execute();
            }
        }
    });
公共类my\u frag扩展片段{
WakeLock wl;
//创建时,配置已更改等
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
setRetainInstance(真);
PowerManager pm=(PowerManager)this.getActivity().getSystemService(Context.POWER\u服务);
wl=pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,“MyWakeLock”);
//我碰巧在一个基于异步任务的按钮点击事件中有它
//(旁注:我应该为我的异步任务使用加载器,但这也可以)
//只要把它移到按钮外面,如果你不需要的话就点击
connectButton.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
如果(度量_任务!=null)
{
Status s=度量值_task.getStatus();
如果(s.name().equals(“RUNNING”)){
if(度量值_任务运行){
度量_任务。取消(true);
connectButton.setText(“开始”);
metrics_task.running=false;

wl.release();尝试通过扩展应用程序类来获取唤醒锁,这意味着为整个应用程序获取锁: 代码:


如果您有任何其他疑问,请告诉我。准备好帮助!

我尝试了此代码,但没有任何更改!它通常会禁用关闭屏幕吗?不,它会在调用“活动”时解锁您的屏幕,请参阅编辑了我的答案。您正在检查空值,然后不考虑使用mPM变量…同时发布更多信息-这是什么?一个片段-在哪里使用,应用程序在做什么等。发布更多(相关)代码不要忘记在Android清单中添加权限:)您的wakelook永远不会发布,因为在实际设备上不会调用onTerminate。这仅在模拟设备上调用()。请参阅:True。但我们可以在onStop()中添加相同的权限对吗?请倾诉您的想法。建议您使用onCreate/onDestroy或onStart/onStop这对函数。因此,如果您在onStop中释放唤醒锁,您应该在onStart中获得它。否则,可能会发生锁定被释放但以后再也不会获得的情况。如果您正在为应用程序启动获取唤醒锁,那么请使用onStart在整个应用程序生命周期中,您都需要它,理想情况下,它应该在应用程序终止时释放。事实上,在实际设备上,应用程序终止没有回调。因此,假设您应该避免在应用程序上获取。onCreate().P.S.onStop()不属于应用程序类,而是来自活动类的API。
package com.ballytech.RemoteGamingClient.UserView;

import android.app.Application;
import android.content.Intent;
import android.os.PowerManager;
import android.provider.Settings;

/**
 * @author SDurai
 * 
 */
public class RCGApplication extends Application 
{
    private static final String TAG = RCGApplication.class.getSimpleName();
    private PowerManager.WakeLock mWakeLock = null;

    @Override
    public void onCreate() {
        super.onCreate();

        final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
        mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
        mWakeLock.acquire();
    }

    @Override
    public void onTerminate() {
        if (mWakeLock.isHeld())
            mWakeLock.release();
        super.onTerminate();
    }
}