【问题标题】:Invoke service when screen turns on (Android)屏幕打开时调用服务(Android)
【发布时间】:2016-02-01 15:50:11
【问题描述】:

我正在创建一个带有面部识别功能的锁屏应用。作为第一步,我正在创建一个简单的锁屏,可以在点击Button 时解锁。当Switch on MainActivity 打开时,锁屏应该开始。我创建了一个Service,它启动了我的锁屏活动,但是一旦我关闭然后打开我的屏幕,该活动就不会再次显示。 我是android的初学者,不知道该怎么做。如果我能得到一些帮助,我会很高兴。

java文件是:

MainActivity.java

package com.sanket.droidlockersimple;

import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.widget.CompoundButton;
import android.widget.Switch;

public class MainActivity extends ActionBarActivity {

    private Switch enableLocker;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        enableLocker = (Switch) findViewById(R.id.enableLocker);
        enableLocker.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(enableLocker.isChecked()) {
                    Intent intent = new Intent(MainActivity.this, DroidLockerService.class);
                    startService(intent);
                }
            }
        });
    }
}

DroidLockerService.java

package com.sanket.droidlockersimple;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;

public class DroidLockerService extends Service {
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);
        Intent intent1 = new Intent(this, LockScreen.class);
        intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent1);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }
}

LockScreen.java

package com.sanket.droidlockersimple;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;

public class LockScreen extends ActionBarActivity {

    private Button unlock;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
        setContentView(R.layout.activity_lock_screen);

        Button unlock = (Button) findViewById(R.id.button);
        unlock.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
    }
}

【问题讨论】:

标签: android service lockscreen


【解决方案1】:

我相信你需要的是BroadcastReceiver

您有一个服务正在运行,但需要告诉服务屏幕已打开或关闭。 Android 通过在某些事情发生时(即收到电话、系统打开等)发出广播事件来实现这一点。任何包含相关BroadcastIntent 的已注册广播接收器都将被告知该事件已发生。

然后您的广播接收器可以告诉您的服务该事件已经发生并且您的服务可以适当地响应。

我认为您需要注册的特定广播事件是“ACTION_SCREEN_ON”和“ACTION_SCREEN_OFF”。有关详细信息,请参阅Intent 开发人员参考页面。

还可以阅读developer guide 了解 Android 中的意图和意图过滤器,这里是 BroadcastReceiver 参考页面。 (StackOverflow 不允许我发布超过 2 个链接...只需在 Android 开发者网站上搜索即可。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-03
    • 2018-04-01
    • 2016-10-05
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    • 2023-03-24
    • 2021-12-11
    相关资源
    最近更新 更多