gpt4 book ai didi

android - 如何以编程方式锁定/解锁屏幕?

转载 作者:IT老高 更新时间:2023-10-28 21:43:16 26 4
gpt4 key购买 nike

我正在做一个在摇动时锁定屏幕的应用程序。现在它处于锁定状态,如果屏幕关闭,它会从那里进入广播接收器,进入必须打开屏幕的服务。

下面是广播接收器:

  public class ScreenReceiver extends BroadcastReceiver {   
public static boolean wasScreenOn = true;
@Override
public void onReceive(Context context, Intent intent) {

System.out.println("Entered Broadcaste Reciever");

if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
// DO WHATEVER YOU NEED TO DO HERE
System.out.println("SCREEN_OFF"+wasScreenOn);
wasScreenOn = false;

Intent i = new Intent(context, UpdateService.class);
i.putExtra("screen_state", wasScreenOn);
context.startService(i);

System.out.println("jrkejhr keh");
}
else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
// AND DO WHATEVER YOU NEED TO DO HERE
wasScreenOn = true;
System.out.println("SCREEN_ON"+wasScreenOn);
}
}

它进入我写了回家的 Intent Action 的服务是......

  ShakeListener mShaker;
int amountOfTime = 0;
Context context1;
@Override
public void onCreate() {

super.onCreate();

// REGISTER RECEIVER THAT HANDLES SCREEN ON AND SCREEN OFF LOGIC
System.out.println("Enterd Service");
final Vibrator vibe = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);

mShaker = new ShakeListener(this);
mShaker.setOnShakeListener(new ShakeListener.OnShakeListener () {
public void onShake() {
vibe.vibrate(100);
Intent goHome = new Intent();
goHome.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
goHome.setAction("android.intent.action.MAIN");
goHome.addCategory("android.intent.category.HOME");
startActivity(goHome);
}
});
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}

它正在进入服务。但主屏幕不显示。调用服务时屏幕被锁定。

最佳答案

编辑:

由于有些人在以编程方式锁定后解锁设备方面需要帮助,我通过帖子 Android screen lock/ unlock programatically ,请看,可以帮助你。

原答案是:

您需要获得管理员权限才能锁定手机屏幕

请查看下面的简单教程以实现这一目标

Lock Phone Screen Programmtically

这里也是代码示例..

LockScreenActivity.java

public class LockScreenActivity extends Activity implements OnClickListener {  
private Button lock;
private Button disable;
private Button enable;
static final int RESULT_ENABLE = 1;

DevicePolicyManager deviceManger;
ActivityManager activityManager;
ComponentName compName;

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

deviceManger = (DevicePolicyManager)getSystemService(
Context.DEVICE_POLICY_SERVICE);
activityManager = (ActivityManager)getSystemService(
Context.ACTIVITY_SERVICE);
compName = new ComponentName(this, MyAdmin.class);

setContentView(R.layout.main);

lock =(Button)findViewById(R.id.lock);
lock.setOnClickListener(this);

disable = (Button)findViewById(R.id.btnDisable);
enable =(Button)findViewById(R.id.btnEnable);
disable.setOnClickListener(this);
enable.setOnClickListener(this);
}

@Override
public void onClick(View v) {

if(v == lock){
boolean active = deviceManger.isAdminActive(compName);
if (active) {
deviceManger.lockNow();
}
}

if(v == enable){
Intent intent = new Intent(DevicePolicyManager
.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
compName);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
"Additional text explaining why this needs to be added.");
startActivityForResult(intent, RESULT_ENABLE);
}

if(v == disable){
deviceManger.removeActiveAdmin(compName);
updateButtonStates();
}
}

private void updateButtonStates() {

boolean active = deviceManger.isAdminActive(compName);
if (active) {
enable.setEnabled(false);
disable.setEnabled(true);

} else {
enable.setEnabled(true);
disable.setEnabled(false);
}
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case RESULT_ENABLE:
if (resultCode == Activity.RESULT_OK) {
Log.i("DeviceAdminSample", "Admin enabled!");
} else {
Log.i("DeviceAdminSample", "Admin enable FAILED!");
}
return;
}
super.onActivityResult(requestCode, resultCode, data);
}
}

MyAdmin.java

public class MyAdmin extends DeviceAdminReceiver{  


static SharedPreferences getSamplePreferences(Context context) {
return context.getSharedPreferences(
DeviceAdminReceiver.class.getName(), 0);
}

static String PREF_PASSWORD_QUALITY = "password_quality";
static String PREF_PASSWORD_LENGTH = "password_length";
static String PREF_MAX_FAILED_PW = "max_failed_pw";

void showToast(Context context, CharSequence msg) {
Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
}

@Override
public void onEnabled(Context context, Intent intent) {
showToast(context, "Sample Device Admin: enabled");
}

@Override
public CharSequence onDisableRequested(Context context, Intent intent) {
return "This is an optional message to warn the user about disabling.";
}

@Override
public void onDisabled(Context context, Intent intent) {
showToast(context, "Sample Device Admin: disabled");
}

@Override
public void onPasswordChanged(Context context, Intent intent) {
showToast(context, "Sample Device Admin: pw changed");
}

@Override
public void onPasswordFailed(Context context, Intent intent) {
showToast(context, "Sample Device Admin: pw failed");
}

@Override
public void onPasswordSucceeded(Context context, Intent intent) {
showToast(context, "Sample Device Admin: pw succeeded");
}

}

关于android - 如何以编程方式锁定/解锁屏幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14352648/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com