1

最近几天我一直在环顾四周,所提出的问题的答案都没有帮助我,我正在用一些可能很容易解决的东西撞到我的头......我想使用接近传感器和我正在做的是,如果我将手指放在传感器上,它会关闭屏幕,如果我将手指移开,它会重新回到屏幕上!我成功地关闭了屏幕,当我移开手指时收到“Log.i("info", "trying to turn on!")”消息,但不知何故屏幕无法打开...... .我试过wakelock(评论)和没有成功的标志!如果我移开手指,键盘上的灯会亮,但屏幕不会.. 如果我按两次电源按钮,它会成功打开屏幕!有人可以帮我吗?:(

@Override
public void onSensorChanged(SensorEvent event) {
        if(event.sensor.getType()==Sensor.TYPE_PROXIMITY){
    ProximityReading.setText("\nProximity Sensor Reading:" + String.valueOf(event.values[0]));
    }

        if(event.values[0] == 0) {
      WindowManager.LayoutParams params = getWindow().getAttributes();
      getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
          getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
      getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
      params.screenBrightness = 0f;
      getWindow().setAttributes(params);
            } else {
          WindowManager.LayoutParams params = getWindow().getAttributes();
      params.screenBrightness = 1f;
      getWindow().setAttributes(params);

      /*powermanager = (PowerManager) getSystemService(Context.POWER_SERVICE);
        wakeLock = powermanager.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG");
      wakeLock.acquire();

      Log.i("info", "trying to turn on!");

    }
}
4

3 回答 3

0

如果要开屏,可以使用PowerManager中的“TurnScreenOn”等API,或者使用ACQUIRE_CAUSES_WAKEUP结合FULL_WAKE_LOCK

于 2013-01-29T02:12:07.203 回答
0

我使用以下方法解锁手机,将其点亮,然后重新启用键盘锁。

public void unlockAndPowerup(){
    KeyguardManager km = (KeyguardManager) mContext.getSystemService(Context.KEYGUARD_SERVICE);
    final KeyguardManager.KeyguardLock kl = km.newKeyguardLock("MyKeyguardLock");
    kl.disableKeyguard();

    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
    WakeLock wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK
            | PowerManager.ACQUIRE_CAUSES_WAKEUP
            | PowerManager.ON_AFTER_RELEASE, "MyWakeLock");

    wakeLock.acquire();
    wakeLock.release();
    kl.reenableKeyguard();
}
于 2014-11-12T10:57:24.137 回答
0

你的程序是错误的。它可能会偶然在某些设备上运行,但这不是这样做的方法。

  1. FLAG_TURN_SCREEN_ON应该应用于活动的 onCreate 方法。您需要修改您的应用程序逻辑。

  2. 您的屏幕关闭技术不正确。您正在修改亮度,这是一种很老套的方式,并且可能根本不会关闭屏幕,并且会耗尽电池电量。您需要通过设备管理员权限来实现它。这是官方的做法

锁定示例代码

public static void lockNow(Context c) {
    DevicePolicyManager dpm = (DevicePolicyManager)c.getSystemService(Context.DEVICE_POLICY_SERVICE);
    if(dpm.isAdminActive(new ComponentName(c.getApplicationContext(),DeviceAdmin.class)))
        dpm.lockNow();
}

DeviceAdmin.java

import android.app.admin.DeviceAdminReceiver;
public class DeviceAdmin extends DeviceAdminReceiver {
}

在清单中

<receiver
        android:name=".admin.DeviceAdmin"
        android:permission="android.permission.BIND_DEVICE_ADMIN" >
        <meta-data
            android:name="android.app.device_admin"
            android:resource="@xml/admin" />

        <intent-filter>
            <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
        </intent-filter>
    </receiver>

并请求设备管理员权限

private void askAdminPerm(){
    Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
    intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
            new ComponentName(root.getContext(), DeviceAdmin.class));
    intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, getString(R.string.lock_msg_big));
    startActivity(intent);
}
于 2015-11-26T19:04:10.730 回答