亮屏时调用服务 (Android)
Invoke service when screen turns on (Android)
我正在创建一个具有面部识别功能的锁屏应用程序。作为第一步,我正在创建一个简单的锁屏界面,点击 Button
即可解锁。当 MainActivity
上的 Switch
打开时,锁屏应该开始。我创建了一个 Service
来启动我的锁屏 activity,但是 activity 在我关闭然后打开我的屏幕后不会再次显示。
我是 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();
}
});
}
}
我相信你需要的是BroadcastReceiver
您有一项服务 运行,但需要告知该服务屏幕已打开或关闭。 Android 通过在某些事情发生时发出广播事件来实现这一点(即 phone 收到呼叫、系统打开等)。任何包含相关 BroadcastIntent
的已注册广播接收器都将收到事件已发生的通知。
然后您的广播接收器可以告诉您的服务事件已经发生并且您的服务可以做出适当的响应。
我认为您需要注册的特定广播事件是 "ACTION_SCREEN_ON" 和 "ACTION_SCREEN_OFF"。有关详细信息,请参阅 Intent 开发人员参考页面。
另请阅读 developer guide 中的意图和意图过滤器 Android,这里是 BroadcastReceiver 参考页。 (Whosebug 不允许我 post 超过 2 个链接...只需在 Android 开发者网站上搜索即可。)
我正在创建一个具有面部识别功能的锁屏应用程序。作为第一步,我正在创建一个简单的锁屏界面,点击 Button
即可解锁。当 MainActivity
上的 Switch
打开时,锁屏应该开始。我创建了一个 Service
来启动我的锁屏 activity,但是 activity 在我关闭然后打开我的屏幕后不会再次显示。
我是 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();
}
});
}
}
我相信你需要的是BroadcastReceiver
您有一项服务 运行,但需要告知该服务屏幕已打开或关闭。 Android 通过在某些事情发生时发出广播事件来实现这一点(即 phone 收到呼叫、系统打开等)。任何包含相关 BroadcastIntent
的已注册广播接收器都将收到事件已发生的通知。
然后您的广播接收器可以告诉您的服务事件已经发生并且您的服务可以做出适当的响应。
我认为您需要注册的特定广播事件是 "ACTION_SCREEN_ON" 和 "ACTION_SCREEN_OFF"。有关详细信息,请参阅 Intent 开发人员参考页面。
另请阅读 developer guide 中的意图和意图过滤器 Android,这里是 BroadcastReceiver 参考页。 (Whosebug 不允许我 post 超过 2 个链接...只需在 Android 开发者网站上搜索即可。)