Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓:Wake&;解锁手机_Android_Broadcastreceiver_Android Wake Lock - Fatal编程技术网

Android 安卓:Wake&;解锁手机

Android 安卓:Wake&;解锁手机,android,broadcastreceiver,android-wake-lock,Android,Broadcastreceiver,Android Wake Lock,我正试图找出如何唤醒和解锁的服务电话。我一直在说这篇文章,但我不明白为什么它不起作用。这是我目前掌握的代码: public class WakephoneActivity extends Activity { BroadcastReceiver mReceiver; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState)

我正试图找出如何唤醒和解锁的服务电话。我一直在说这篇文章,但我不明白为什么它不起作用。这是我目前掌握的代码:

public class WakephoneActivity extends Activity {

    BroadcastReceiver mReceiver;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mReceiver = new BroadcastReceiver() {

            @Override
            public void onReceive(Context context, Intent intent) {
                // Log.v(TAG, "Screen OFF onReceive()");
                screenOFFHandler.sendEmptyMessageDelayed(0, 2000);
            }
        };
    }

    private Handler screenOFFHandler = new Handler() {

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            // do something
            // wake up phone
            // Log.i(TAG, "ake up the phone and disable keyguard");
            PowerManager powerManager = (PowerManager) WakephoneActivity.this
                    .getSystemService(Context.POWER_SERVICE);
            long l = SystemClock.uptimeMillis();
            powerManager.userActivity(l, false);// false will bring the screen
            // back as bright as it was, true - will dim it
        }
    };

    protected void onResume() {
        super.onResume();
        IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
        registerReceiver(mReceiver, filter);
        // Log.i(TAG, "broadcast receiver registered!");
    }
}

我也在清单中添加了代码。有什么想法吗?

要使服务始终处于活动状态,您需要在清单上拥有此权限:

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

您可能需要将PowerManager.PARTIAL_WAKE_锁更改为所需的锁。您可以查看相关信息。

在您的服务中使用下面的代码

PowerManager pm = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE);
        mWakeLock = pm.newWakeLock((PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "YourServie");
        mWakeLock.acquire();
        [...]
        mWakeLock.release();
如果您也想解锁屏幕,请在您的服务中注册一个接收器,用于监测屏幕是否打开/关闭,如果屏幕已关闭且您想解锁手机,请在
onCreate
中使用此代码启动活动:

Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
this.finish();
return;
我知道,这是一个相当肮脏的,但据我所知,没有其他方式解锁锁屏(这将只在没有密码等设置的情况下工作,所以它必须是正常的“滑动解锁”屏幕)

别忘了添加
android.permission.WAKE_LOCK
;-)

/编辑:我刚才看到你已经在使用一个活动了。如果您有一个,并且根本不需要该服务,只需将此代码放入活动中。

有一个可以为您执行此操作的代码。示例用法:

在服务中完成操作后,调用以释放唤醒锁

(由于@Force已经向您提供了有关wakeLock的详细信息,因此无需在此重复;-)


请注意,该类已从api level 26.1.0中弃用,请参考

我认为您可以以某种方式删除锁定设置,以便在活动中直接唤醒手机。
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
this.finish();
return;
import android.content.Context;
import android.content.Intent;
import android.os.SystemClock;
import android.support.v4.content.WakefulBroadcastReceiver;
import android.util.Log;

public class SimpleWakefulReceiver extends WakefulBroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // This is the Intent to deliver to our service.
        Intent service = new Intent(context, SimpleWakefulService.class);

        // Start the service, keeping the device awake while it is launching.
        Log.i("SimpleWakefulReceiver", "Starting service @ " + SystemClock.elapsedRealtime());
        startWakefulService(context, service);
    }
}